【问题标题】:Why doesn't C# allow using parent's constructor by default? [closed]为什么 C# 默认不允许使用父级的构造函数? [关闭]
【发布时间】:2015-10-04 18:13:38
【问题描述】:

请注意,我不会问如何做某事。这个问题是关于语言作者的设计决策。

假设你有一个带有构造函数和方法的基类:

public class BaseClass
{
    public BaseClass(string argument)
    {
    }

    public void SomeMethod()
    {
    }
}

你还有一个空的派生类(或者,实际上,有其他不相关的东西):

public class DerivedClass : BaseClass
{
    public DerivedClass() // Some other constructor not used in the example, just so it will compile
}

所以,当你尝试在派生类的实例上调用方法时,它会起作用,但如果你尝试调用构造函数,则会导致编译错误:

var d = new DerivedClass("argument"); // error CS1729: The type `DerivedClass' does not contain a constructor that takes `1' arguments
d.SomeMethod(); // Works OK

这个语言设计决策背后的原因是什么?

【问题讨论】:

  • 您的类定义无效,将引发错误 CS1729:BaseClass 类型不包含采用 0 个参数的构造函数。
  • DerivedClass 继承 BaseClass 但它有自己的构造函数。
  • 显然会惹恼你。或者也许他们在周一写了规范的那部分。或者可能是因为金枪鱼。
  • 请将此问题标记为与网络或服务器相关的人阅读该问题吗?
  • 恢复了被@Jashaszun 删除的免责声明。从第一个(已经删除的)答案来看,免责声明是非常必要的。

标签: c# constructor language-design


【解决方案1】:

这是因为构造函数不是继承的。

有关详细信息,请参阅此帖子以了解其原因:Why are constructors not inherited?

【讨论】:

  • 所以,这个问题本质上是重复的。应该更好地搜索。谢谢。
猜你喜欢
  • 2018-05-15
  • 1970-01-01
  • 2011-05-26
  • 2014-11-22
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多