当我们想要控制对象的实例化时,我们经常将构造函数设为私有或内部:
public class A {
private A(int aParam) { }
}
然而,这与封闭类“A”本质上是一样的,因为现在没有人可以继承它。
所以,我们可以让构造函数受保护:
public class A {
protected A(int aParam) { }
}
public class B {
protected B(int aParam) : base(aParam) { }
}
但是,这意味着来自 B 的任何代码(或从它派生的任何类)都可以实例化一个新的 A。
我正在寻找一种控制实例化的方法,但不必(有效或以其他方式)密封类。
注意:我知道类总是可以用反射和其他技巧来实例化;我只对创建明确的“合同”感兴趣。如果有人想故意破坏我的合同,那是他们的事。