为什么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) {...} 

17.10.4默认构造函数 :

如果类不包含实例构造函数声明,则会自动提供默认实例构造函数。 2默认构造函数只是调用直接基类的无参数构造函数。 3如果直接基类没有可访问的无参数实例构造函数,则会发生编译时错误。 4如果类是抽象的,则默认构造函数的声明可访问性受到保护。 5否则,默认构造函数的声明可访问性是公共的

为什么是这样?

这篇文章解释了它。

有没有办法禁用此行为?

不。 对不起(但是…请参阅标记答案以获得解决方法:)