Это мой абстрактный класс, который должен быть выведен каждый раз, когда я хочу сделать Singleton:
public abstract class Singleton<T> where T : Singleton<T>
{
private static readonly Lazy<T> _instance = new Lazy<T>(() =>
{
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<Server>
{
private Server() { }
...
}
Это совершенно правильно, а если нет, то почему?
Edit:
- Добавлен частный конструктор на примере производного класса и вызывается на абстрактной основе.
Edit:
- Повторная инициализация параметров типа.