Я просматривал следующую реализацию Singleton, упомянутую здесь. Я понимаю, что статические конструкторы выполняются до первого вызова статического метода или до создания экземпляра объекта, но не понял его использования здесь (даже из комментариев). Может ли кто-нибудь помочь мне понять это?
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton()
{
}
private Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
The laziness of type initializers is only guaranteed by .NET when the type isn't marked with a special flag called 'beforefieldinit'. Unfortunately, the C# compiler (as provided in the .NET 1.1 runtime, at least) marks all types which don't have a static constructor (i.e. a block which looks like a constructor but is marked static) as 'beforefieldinit'.Итак, он хочет, чтобыnew Singleton()создавался как можно позже (лениво), и единственный способ заставить компилятор C# сделать это - предоставить пустой статический конструктор. - person porges   schedule 16.03.2012