Factory
使用工厂模式(换句话说,用于获取类实例而不是显式实例化的静态函数)时,私有构造函数非常有用。
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;
}
}
带有嵌套子项的伪密封
任何从外部类继承的嵌套类都可以访问私有构造函数。
例如,您可以使用它来创建一个抽象类you可以继承,但没有其他人(一个internal
构造函数也可以在这里将继承限制为单个程序集,但是private
构造函数强制所有实现都是嵌套类。)
public abstract class BaseClass
{
private BaseClass() { }
public class SubClass1 : BaseClass
{
public SubClass1() : base() { }
}
public class SubClass2 : BaseClass
{
public SubClass2() : base() { }
}
}
基础构造函数
它们还可以用于创建从不同的、更易于访问的构造函数调用的“基本”构造函数。
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) { }
}