为什么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否则,默认构造函数的声明可访问性是公共的
为什么是这样?
这篇文章解释了它。
有没有办法禁用此行为?
不。 对不起(但是…请参阅标记答案以获得解决方法:)