I found that in C# you can implement a Singleton class, as follows:
class Singleton
{
private static Singleton _instance;
public static Singleton Instance => _instance ??= new Singleton();
protected Singleton() { }
}
Which works for instances of type Singleton, i.e:
var a = Singleton.Instance;
var b = Singleton.Instance;
Console.WriteLine(ReferenceEquals(a, b)); //Prints True.
But what if I want that derived classes of Singleton also follow the Singleton pattern, i.e:
class A:Singleton
{ ... }
A a = A.Instance;
In this case the static member Instance is accessed by Singleton class and creates a Singleton instance, which isn't the objective.
Besides, there are two main problems with this solution:
- The derived class can implement its own constructor and lose the Singleton Pattern.
- If there is another instance of
Singletonthen the derived class is going to reference that less-derived instance
My question is: Is there another way to implement a Singleton class in C# ensuring that derived class are also singleton?