0

を使用して、このページに従ってシングルトンを実装しましSystem.Lazy<T>た。

System.Lazy<T>コンストラクターのTアクセス修飾子が である場合、技術的にどのようにして のコンストラクターにアクセスできるのだろうかprivate

4

1 に答える 1

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();
}
于 2013-08-08T12:38:22.600 に答える