C# 为什么base()构造函数不是必需的?

C# 为什么base()构造函数不是必需的?,c#,inheritance,constructor,C#,Inheritance,Constructor,我有一个像这样的班级结构 abstract class Animal { public Animal(){ //init stuff.. } } class Cat : Animal { public Cat(bool is_keyboard) : base() //NOTE here { //other init stuff } } 现在,请看注释的线条。如果删除:base(),则它将编译时不会出错 为什么会这样?有没有办法禁用此行为?如果不添加任何其他

我有一个像这样的班级结构

abstract class Animal {
  public Animal(){
    //init stuff..
  }
}

class Cat : Animal {
  public Cat(bool is_keyboard) : base() //NOTE here
  {
    //other init stuff
  }
}
现在,请看注释的线条。如果删除
:base()
,则它将编译时不会出错


为什么会这样?有没有办法禁用此行为?

如果不添加任何其他内容(any
:base(…)
:this(…)
),则会有一个隐式的
:base()
)。要强制其显式,请向基本构造函数添加一个参数。那么它就不可能是隐含的

例如:

public Animal(string name) {...}
为什么会这样

这就是原因

有没有办法禁用此功能 行为

没有。很抱歉(但是…请参阅mark answer以了解解决方法:)

:

如果类不包含实例 构造函数声明,默认值 实例构造函数是自动生成的 假如2默认构造函数 只需调用无参数 直接基类的构造函数。 3如果直接基类没有 具有可访问的无参数 实例构造函数,编译时 发生错误。4如果班级是 然后声明 默认设置的可访问性 构造函数是受保护的。5否则, 已声明的 默认构造函数是公共的


虽然为true,但对于删除“:base()”时发生的情况,这是错误的部分。这一部分讲述了如果整个构造函数被移除会发生什么。酷,你每天都会学到一些东西。。。我总是显式地放置base(),可能会继续这样做,因为有多少开发人员意识到有对它的隐式调用?此外,我发现Skeet的漂亮文章告诉了我这一切:@slugster,我没有意识到。。。是的。