Ваш код не создает синглтон.Он создает экземпляр Foo
, и, вероятно, любой другой тоже может - это означает, что он не одиночный.
Вы создали один экземпляр, на который ссылается статическая переменная в ServiceFactory
, но это не одно и то же.
Если у вас нет какого-то класса, который вы ограничили, так что его может быть только один экземпляр, у вас нет синглтона.У вас может быть фабричный шаблон, кеш, что угодно - но у вас нет синглтона.
Теперь то, что вы получили, эквивалентно этому:
static Foo container = new Foo();
static ServiceFactory()
{
}
...и я не уверен, почему вы думаете, что ваша версия проще, чем выше.Если вы do действительно хотите создать синглтон, вам понадобится приватный конструктор для любого класса, который вы пытаетесь превратить в синглтон.В этот момент у вас есть мой четвертый пример, так что, опять же, я не уверен, где вы думаете, что все упрощаете.
Конечно, вам может вообще не понадобиться статический конструктор - этозависит от того, насколько точно вам нужно время.(Прочитайте мою статью о beforefieldinit
для получения более подробной информации, наряду с моим сообщением в блоге об изменениях CLR v4 .)