只有私有构造函数的抽象类

本文关键字:抽象类 构造函数 | 更新日期: 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 {
    }
}

Derived1Derived3可以访问private AbstractPrivateBase()构造函数,所以这个技巧有效地限制了对嵌套类的派生。