Fabrik
Private Konstruktoren können nützlich sein, wenn ein Factory-Muster verwendet wird (mit anderen Worten, eine statische Funktion, mit der eine Instanz der Klasse anstelle einer expliziten Instanziierung abgerufen wird).
public class MyClass
{
private static Dictionary<object, MyClass> cache =
new Dictionary<object, MyClass>();
private MyClass() { }
public static MyClass GetInstance(object data)
{
MyClass output;
if(!cache.TryGetValue(data, out output))
cache.Add(data, output = new MyClass());
return output;
}
}
Pseudo-versiegelt mit verschachtelten Kindern
Alle verschachtelten Klassen, die von der äußeren Klasse erben, können auf den privaten Konstruktor zugreifen.
Sie können dies beispielsweise verwenden, um eine abstrakte Klasse zu erstellen, von der Sie erben können, aber von niemand anderem (ein internalKonstruktor würde auch hier arbeiten, um die Vererbung auf eine einzelne Assembly zu beschränken, aber der privateKonstruktor erzwingt, dass alle Implementierungen verschachtelte Klassen sind.)
public abstract class BaseClass
{
private BaseClass() { }
public class SubClass1 : BaseClass
{
public SubClass1() : base() { }
}
public class SubClass2 : BaseClass
{
public SubClass2() : base() { }
}
}
Basiskonstruktor
Sie können auch verwendet werden, um "Basis" -Konstruktoren zu erstellen, die von verschiedenen, besser zugänglichen Konstruktoren aufgerufen werden.
public class MyClass
{
private MyClass(object data1, string data2) { }
public MyClass(object data1) : this(data1, null) { }
public MyClass(string data2) : this(null, data2) { }
public MyClass() : this(null, null) { }
}