如果一个类有一个私有构造函数,那么它就不能被实例化.
私有构造函数的用途是什么?
此外,它还用于singleton类,但除此之外,还有其他用途吗?
(注意:我之所以排除上面的singleton case ,是因为我不明白当有一个静态类可用时,为什么我们需要一个singleton.你可能不会回答这个问题,因为我对这个问题感到困惑.)
如果一个类有一个私有构造函数,那么它就不能被实例化.
私有构造函数的用途是什么?
此外,它还用于singleton类,但除此之外,还有其他用途吗?
(注意:我之所以排除上面的singleton case ,是因为我不明白当有一个静态类可用时,为什么我们需要一个singleton.你可能不会回答这个问题,因为我对这个问题感到困惑.)
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;
}
}
Pseudo-Sealed with Nested Children
任何从外部类继承的嵌套类都可以访问私有构造函数.
例如,您可以使用它创建一个抽象类,you可以从中继承,但不能从其他任何类继承(internal
构造函数在这里也可以将继承限制为单个程序集,但private
构造函数强制所有实现都是嵌套类)
public abstract class BaseClass
{
private BaseClass() { }
public class SubClass1 : BaseClass
{
public SubClass1() : base() { }
}
public class SubClass2 : BaseClass
{
public SubClass2() : base() { }
}
}
Base Constructor
它们还可以用于创建"基本"构造函数,这些构造函数是从不同的、更易访问的构造函数调用的.
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) { }
}