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

时间:2013-08-08 12:32:59

标签: c#-4.0 constructor singleton access-modifiers lazy-initialization

我使用System.Lazy<T>根据this page实施了单身人士。

我想知道,当构造函数的访问修饰符为System.Lazy<T>时,技术上T如何访问private的构造函数。

1 个答案:

答案 0 :(得分:3)

Lazy<T>使用匿名方法实例化,如下所示:

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();
}