我找不到在C#中不允许从基类继承私有无参数构造函数的原因。以下是最简单的示例:为什么从具有私有构造函数的类继承是不允许的
public class Base
{
private Base()
{
}
public string Name { get; set; }
}
public class Derived : Base
{
public Derived(string name)
{
base.Name = name;
}
}
编译器不会编译此代码。为什么这样?这个类当然不是密封的,虽然基类不需要多次实例化(就像在Singleton中一样),但我认为派生类有很多次都可以用参数化构造函数实例化。 在这种情况下为什么不允许继承?
从外部看来,基类没有构造函数,如果它们在同一个项目中我敢打赌内部函数:) – EpicKip
只要你从一个类继承,这个类需要有可访问的构造函数。但是你只放了一个私人的类,所以你的Derived类将无法声明它的基类。将您的无参数构造函数设置为受保护,以允许您的Derived类使用它。 – JBO
另请参阅[文档](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/private),它清楚地解释了“private”的含义。即该成员只能通过声明的类型访问。派生类不能访问基类的_any_“private”成员,包括构造函数。请注意,这并不意味着'private'构造函数不能被调用(它可以被非私有构造函数调用),也不意味着该类不能被继承(它也可以提供非私有构造函数)。 –