抽象 class 只有私有构造函数

Abstract class with only private constructors

为什么要允许编译这段代码?

public abstract class AbstractPrivateBase
{
    private AbstractPrivateBase() { }
}

继承者不能实例化自己。因此,无法从这个 class 中推导出来。我觉得 Visual Studio(甚至 Resharper)应该显示一个错误,说明类似 "Abstract classes cannot contain only private constructors." 的内容,因为在语言中允许这样做是没有意义的。

唯一可能的用途是如果此 class 包含静态成员。如果是这种情况,一个友好的警告说明,"Abstract classes with only private constructors can be made static." 因为除了静态成员之外无法访问任何其他成员。

如果您从该私有基派生一个嵌套的 class,这将非常有意义:

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() 构造函数,所以这个技巧有效地将派生限制为嵌套的 classes.