Реализует паттерн Singleton в C#


Это лучший способ, чтобы реализовать этот шаблон в C#?

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();
    public static Singleton Instance { get { return instance; } }

    static Singleton() {}
    private Singleton() {}
}


27876
67
задан 20 января 2011 в 10:01 Источник Поделиться
Комментарии
2 ответа

Я использую Джон Скит версии из потокобезопасным Синглтон с полностью ленивое инстанцирование в C#:

public sealed class Singleton
{
// Thread safe Singleton with fully lazy instantiation á la Jon Skeet:
// http://csharpindepth.com/Articles/General/Singleton.aspx
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();
}
}

Это творит чудеса для меня! Это очень простой в использовании, просто получить экземпляр от экземпляра собственность вроде так; SingletonName экземпляр = SingletonName.Экземпляра;

75
ответ дан 20 января 2011 в 10:01 Источник Поделиться

Я всегда использовать это решение, если мне нужно реализовать синглтон в C#

public sealed class Logging
{
static Logging instance = null;
static readonly object lockObj = new object();

private Logging()
{
}

public static Logging Logger
{
get
{
lock (lockObj)
{
if (instance == null)
{
instance = new Logging();
}
return instance;
}
}
}

}

По сравнению с вашим решением это многопотоковое исполнение и использует ленивый-создание метод. (Объект только создается, если на самом деле нужно)

Жадный и ленивый творение не стоит обсуждения в этом примере, но я бы по возможности использовать потокобезопасную реализацию.

6
ответ дан 20 января 2011 в 10:01 Источник Поделиться