【发布时间】:2017-08-02 08:05:42
【问题描述】:
我找不到在 C# 中不允许从基类继承私有无参数构造函数的原因。这是最简单的例子:
public class Base
{
private Base()
{
}
public string Name { get; set; }
}
public class Derived : Base
{
public Derived(string name)
{
base.Name = name;
}
}
编译器不编译此代码。为什么会这样?当然,该类不是密封的,虽然基类不应该被多次实例化(如在 Singleton 中),但我认为派生类完全有权使用带参数的构造函数多次实例化。 为什么在这种情况下不允许继承?
【问题讨论】:
-
在我看来,基类没有构造函数,如果它们在同一个项目中,我敢打赌内部会工作:)
-
只要继承自一个类,这个类就需要有一个可访问的构造函数。但是您只放置了一个私有的,因此您的 Derived 类将无法指定它的基类。将您的无参数构造函数设置为受保护,以允许您的派生类使用它。
-
另见the documentation,它清楚地解释了
private的含义。 IE。该成员只能由其声明的类型访问。派生类无权访问基类的 anyprivate成员,包括构造函数。请注意,这并不意味着不能调用private构造函数(可以由非私有构造函数调用),也不意味着不能继承类(它也可以提供非私有构造函数)。
标签: c#