を使用して、このページに従ってシングルトンを実装しまし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();
}