所有代码示例总是使用base(),如下所示
class A
{
public A()
{
Console.Writeline("A");
}
}
class B : A
{
public B():base() {}
}
e.g。 http://msdn.microsoft.com/en-us/library/hfw7t1ce%28v=vs.71%29.aspx
而我最近发现
class A
{
public A()
{
Console.Writeline("A");
}
}
class B : A
{
public B() {}
}
还打印A
问 - 它是一个新的“特性”还是不好的形式,不在派生类构造函数中调用base()并且会增加我的坏业力并导致以后出现问题?
或
可以安全地忽略调用base()吗?
答案 0 :(得分:7)
不,这不是新的 - 如果您没有显式调用基础构造函数,默认情况下将调用默认构造函数。
自己添加这个我会考虑只是“噪音”,编译器会为你做到这一点,所以你不必。如果需要除默认构造函数之外的特定重载,则应该只调用基本构造函数(这意味着如果基类不提供默认构造函数,则需要进行基本构造函数调用)。
答案 1 :(得分:6)
如果
,您只需要使用base1)您需要将变量传递给基础构造函数。
2)您需要指定要使用的基础构造函数。
除此之外,您可以放心地将其排除在外。将调用默认的基础构造函数。
答案 2 :(得分:3)
无论是否使用: base()
显式调用默认构造函数,都会调用默认构造函数。这是一个风格问题,但普遍的惯例是,除非你正在调用一个特定的参数化基础构造函数,否则将其关闭。
答案 3 :(得分:1)
不需要调用base()。除非您明确调用另一个,否则将自动调用默认基本构造函数。我认为这是个人偏好的问题,有点像在访问实例字段之前预先this
。
答案 4 :(得分:0)
当父元素和子元素都具有隐式或显式无参数构造函数时,您不需要从构造函数中调用base()。这将默认发生,不,它不是新的。通常,您将使用base()方法来说明您正在调用哪个父构造函数,并将参数从子构造函数传递给父代。
在构造函数中使用参数尝试它以查看它是如何工作的。