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,我没有意识到。。。是的。