我发现在C#中你可以实现一个Singleton类,如下:
class Singleton
{
private static Singleton _instance;
public static Singleton Instance => _instance ??= new Singleton();
protected Singleton() { }
}
这适用于 type 的实例Singleton
,即:
var a = Singleton.Instance;
var b = Singleton.Instance;
Console.WriteLine(ReferenceEquals(a, b)); //Prints True.
但是,如果我希望 Singleton 的派生类也遵循 Singleton 模式怎么办,即:
class A:Singleton
{ ... }
A a = A.Instance;
在这种情况下,静态成员Instance
由Singleton
类访问并创建一个Singleton
实例,这不是目标。此外,此解决方案存在两个主要问题:
- 派生类可以实现自己的构造函数而失去单例模式。
- 如果有另一个实例,
Singleton
则派生类将引用该派生较少的实例
我的问题是:是否有另一种方法可以在 C# 中实现单例类以确保派生类也是单例的?