楼主的理解有误,base()关键字用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法,指定创建派生类实例时应调用的基类构造函数。有的时候甚至可当做初始化来用,显然是先条用base的
你这样写..当然可有可无啊~
因为你自己隐藏了 base.i ~ 所以i=22了~~
构造是有一定顺序的实现构造的.... 按基类派生类的顺序
当你不指定调用的时候...C#最先寻找默认构造函数调用~
class A1
{
public int i = 0;
public A1()
{
this.i = 1;
}
}
class A2 : A1
{
public int j = 0;
public A2()
{
this.j = 2;
}
}
A2 A2 = new A2();
Console.WriteLine(A2.i);
你可以理解成默认值,如果你的子类没赋值 只是调用,就会实现父类的。
一时很难给你说清楚,等你学了接口之后你可能会理解的深刻一点。
执行结果22,是因为先执行了BaseClass的构造函数,然后又执行了SonClass 的构造函数,不写: base(),也会调用父类的构造函数。你这种写法是显示调用,可以让代码更清晰,不写就是默认调用了。
C#里执行构造函数的顺序是从父--》子这样来执行的。最先调用最基类的构造函数,然后一层层往下执行。虽然你用了Base()来调用父类的构造函数,但是你在构造函数里有对i和j进行了初始化。所以你子类的构造函数会屏蔽父类的。
如果你就想用父类的构造函数,那里子类就直接用Base()就行了。