只有私有构造函数的抽象类
本文关键字:抽象类 构造函数 | 更新日期: 2023-09-27 18:03:10
为什么应该允许编译这段代码?
public abstract class AbstractPrivateBase
{
private AbstractPrivateBase() { }
}
继承者不能实例化自己。因此,没有办法从这个类派生。我觉得Visual Studio(或者甚至Resharper)应该显示一个类似"抽象类不能只包含私有构造函数"这样的错误,因为在语言中允许这样做是没有意义的。
唯一可能的用法是该类包含静态成员。如果是这种情况,一个友好的警告:"只有私有构造函数的抽象类可以是静态的",因为没有办法访问静态成员之外的任何其他成员。
如果您从私有基类派生一个嵌套类,这将非常有意义:
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()
构造函数,所以这个技巧有效地限制了对嵌套类的派生。