を使用して、このページに従ってシングルトンを実装しましSystem.Lazy<T>た。
System.Lazy<T>コンストラクターのTアクセス修飾子が である場合、技術的にどのようにして のコンストラクターにアクセスできるのだろうかprivate。
を使用して、このページに従ってシングルトンを実装しましSystem.Lazy<T>た。
System.Lazy<T>コンストラクターのTアクセス修飾子が である場合、技術的にどのようにして のコンストラクターにアクセスできるのだろうかprivate。
は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();
}