Когда я пытаюсь определить самоссылающийся синглтон следующим образом:
class Singleton<T> where T : Singleton<T> { protected static T singletonInstance; ... }
Реализация синглтон-класса работает хорошо, когда я получаю его с использованием неуниверсального класса, такого как:
class Derived : Singleton<Derived> { ... }
Однако, когда я пытаюсь извлечь синглтон через универсальный класс, например, так:
class Derived<T> : Singleton<Derived<T>> { ... }
и затем реализую универсальные классы:
class DerivedChildA : Derived<int> { ... }
class DerivedChildB : Derived<int> { ... }
Вместо того, чтобы получать индивидуальный классэкземпляры синглтона DerivedChildA
и DerivedChildB
, есть только один экземпляр синглтона типа Derived<int>
, общий для двух дочерних классов.
Я бы предпочел не иметь DerivedChildA
и DerivedChildB
для получения изSingleton<T>
напрямую.Итак, как мне следует изменить объявления классов, чтобы получить отдельные экземпляры-одиночки DerivedChildA
и DerivedChildB
(другими словами, Singleton<DerivedChildA>
и Singleton<DerivedChildB>
)?
Редактировать: как указаноВарун, этот метод самоссылающихся синглетов действительно генерирует уникальные одноэлементные экземпляры, когда тип аргумента T отличается, например, с
class DerivedChildC : Derived<string> { ... }
class DerivedChildD : Derived<double> { ... }
Однако мой проект требует DerivedChildA
и DerivedChildB
, чтобы иметьточно такой же общий тип Derived<int>
, и, к сожалению, я не могу изменить это требование.(