System.Lazy<T> 如何访问 T 的私有构造函数?

Posted

技术标签:

【中文标题】System.Lazy<T> 如何访问 T 的私有构造函数?【英文标题】:How can System.Lazy<T> access private constructor of T? 【发布时间】:2013-08-10 04:08:32 【问题描述】:

我已经根据this page 使用System.Lazy&lt;T&gt; 实现了单例。

我想知道,当构造函数的访问修饰符是private 时,System.Lazy&lt;T&gt; 在技术上如何访问T 的构造函数。

【问题讨论】:

【参考方案1】:

Lazy&lt;T&gt; 使用匿名方法实例化如下:

new Lazy<Singleton>(() => new Singleton());

匿名方法只是位于定义它们的类中的私有方法。由于这是类中的一个方法,因此允许访问该类的任何其他私有成员,包括私有构造函数。

C# 编译器生成的代码与以下代码非常相似:

Func<Singleton> factory = this.__compiler_generated_method;
new Lazy<Singleton>(factory);

private static Singleton __compiler_generated_method()

    return new Singleton();

【讨论】:

我明白了,因此需要将 T 的构造函数作为匿名方法传递给 Lazy&lt;T&gt; 的构造函数

以上是关于System.Lazy<T> 如何访问 T 的私有构造函数?的主要内容,如果未能解决你的问题,请参考以下文章

IEnumerable<T> 使用 c# 在函数内访问 T 的属性

如何表示 Span<T> 列表/数组

delphi如何访问xml文件

用于访问容器<T> 数据成员的适当 API

从 IDesignTimeDbContextFactory<T> 访问 App.config

如何将 JSON 反序列化为具有多个 List<T> 参数的 .NET 对象?