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

时间:2010-03-31 20:59:51

标签: 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(),它将编译而不会出现错误。

这是为什么?有没有办法禁用这种行为?

3 个答案:

答案 0 :(得分:7)

如果您不添加任何其他内容(任何: base(): base(...)),则会隐含: this(...)。要强制它显式,请将参数添加到基础构造函数。然后它不能隐含。

例如:

public Animal(string name) {...}

答案 1 :(得分:1)

17.10.4 Default Constructors

  

如果某个类不包含实例   构造函数声明,默认值   实例构造函数是自动的   提供。 2那个默认构造函数   只需调用无参数   直接基类的构造函数。   3如果直接基类没有   有一个无障碍参数   实例构造函数,编译时   发生错误。 4如果上课   抽象然后声明   默认的可访问性   构造函数受到保护。 5否则,   声明的可访问性   默认构造函数是public

答案 2 :(得分:0)

  

为什么会这样?

article解释了它。

  

有没有办法禁用它   行为?

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