为什么要允许这段代码编译?
public abstract class AbstractPrivateBase
{
private AbstractPrivateBase() { }
}
继承者无法实例化自己。因此,没有办法从这个类派生出来。我觉得Visual Studio(甚至Resharper)应该显示一个错误,说明“抽象类不能只包含私有构造函数”。因为在语言中允许这样做是没有意义的。
唯一可能的用法是此类包含静态成员。如果是这种情况,一个友好的警告声明,“只有私有构造函数的抽象类可以是静态的”。因为没有办法访问任何其他成员而不是静态成员。
答案 0 :(得分:6)
如果您从该私有基础派生嵌套类,这将是完全合理的:
public abstract class AbstractPrivateBase {
public static AbstractPrivateBase D1 = new Derived1();
public static AbstractPrivateBase D2 = new Derived2();
public static AbstractPrivateBase D3 = new Derived3();
private AbstractPrivateBase() { }
private class Derived1 : AbstractPrivateBase {
}
private class Derived2 : AbstractPrivateBase {
}
private class Derived3 : AbstractPrivateBase {
}
}
类Derived1
到Derived3
可以访问private AbstractPrivateBase()
构造函数,因此这个技巧有效地限制了派生到嵌套类。