The Lazy<T>
is instantiated with an anonymous method as follows:
new Lazy<Singleton>(() => new Singleton());
Anonymous methods are under the covers just private methods located in the class that defines them. Since this is a method in the class, it is allowed to access any other private members of that class including the private constructor.
The code the C# compiler generates closely resembles the following:
Func<Singleton> factory = this.__compiler_generated_method;
new Lazy<Singleton>(factory);
private static Singleton __compiler_generated_method()
{
return new Singleton();
}