【发布时间】:2019-07-10 03:23:02
【问题描述】:
当我尝试如下定义自引用单例时:
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>)?
编辑:正如 Varun 所指出的,当参数 T 类型不同时,这种自引用单例的方法确实会产生唯一的单例实例,例如 with
class DerivedChildC : Derived<string> { ... }
class DerivedChildD : Derived<double> { ... }
但是我的项目需要 DerivedChildA 和 DerivedChildB 具有完全相同的泛型类型 Derived<int> ,不幸的是我无法更改此要求。 :(
【问题讨论】:
标签: c# singleton self-reference