Могу ли я таким образом определить абстрактный класс для всех производных синглтонов?

Это мой абстрактный класс, который должен производиться каждый раз, когда я хочу создать Singleton :

public abstract class Singleton where T : Singleton
{
    private static readonly Lazy _instance = new Lazy(() =>
    {
        var constructor = typeof(T).GetConstructor(BindingFlags.NonPublic |
            BindingFlags.Instance, null, new Type[0], null);

        return (T)constructor.Invoke(null);
    });
    public static T Instance { get { return _instance.Value; } }
    public Singleton() { }
}

Итак, каждый раз, когда мне нужно следовать шаблону проектирования Singleton, я могу просто сделать следующее:

sealed class Server : Singleton
{
    private Server() { }
    ...
}

Это полностью правильно, и, если нет, то почему?

Изменить:

  • Добавлен частный конструктор в пример производного класса и вызов на абстрактная база.

Edit:

  • Переработана инициализация параметра типа.

12
задан AgentFire 19 November 2011 в 18:08
поделиться