Я реализовал Шаблон "одиночка" как это:
public sealed class MyClass {
...
public static MyClass Instance {
get { return SingletonHolder.instance; }
}
...
static class SingletonHolder {
public static MyClass instance = new MyClass ();
}
}
От поиска с помощью Google вокруг для реализаций Singleton C#, не кажется, что это - распространенный способ сделать вещи в C#. Я нашел одну подобную реализацию, но класс SingletonHolder не был статичен, и включал явного (пустого) статического конструктора.
Действительно ли это - допустимый, ленивый, ориентированный на многопотоковое исполнение способ реализовать Шаблон "одиночка"? Или есть ли что-то, что я пропускаю?
Джон Скит написал статью о реализации шаблона Singleton в C #.
Ленивая реализация - это версия 5:
public sealed class Singleton
{
Singleton()
{
}
public static Singleton Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested()
{
}
internal static readonly Singleton instance = new Singleton();
}
}
Обратите внимание, в частности, что вы должны явно объявить конструктор, даже если он пуст, чтобы сделать его закрытым.