c# - 使用反射延迟初始化对象

标签 c# lazy-initialization

我想对下面的调用进行延迟初始化。我在构造对象时知道 T 的类型。

T facade = (T)Activator.CreateInstance(typeof(T), param);

有什么办法可以实现吗?

最佳答案

你可以继承Lazy<T> ,像这样:

public class LazyActivator<T> : Lazy<T>
{
    public LazyActivator(params object[] args) : base(() => (T)Activator.CreateInstance(typeof(T), args))
    {
    }
}

然后:

LazyActivator<List<int>> lazyList = new LazyActivator<List<int>>(5);

如果您需要 List<int> (有 Capacity == 5 )

List<int> list = lazyList.Value;

关于c# - 使用反射延迟初始化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31199182/

相关文章:

java - 使用 ConcurrentHashMap 实现参数化线程安全的延迟初始化缓存(不带 volatile 关键字)

c# - 编译器如何使用 'yield return'来构建类

c# - MVC Web 服务返回 - 32 位进程不支持 Microsoft SharePoint

c# - MySQL 连接器 v.6.3.6 .NET 中 GUID 类型的问题

java - 在没有静态嵌套类的情况下按需初始化多个静态变量?

java - Hibernate 和 Jackson 惰性序列化

c# - 如何在 WPF 列表框中禁用 Windows 声音?

c# - XML 属性可能值的正则表达式

swift - Swift 中 Lazy var 和 var as-a-closure 的区别

java - 惰性集合初始化在 hibernate 中失败