关于c#里面的base()的疑惑

2025-02-24 06:52:34
推荐回答(5个)
回答1:

楼主的理解有误,base()关键字用于从派生类中访问基类的成员:调用基类上已被其他方法重写的方法,指定创建派生类实例时应调用的基类构造函数。有的时候甚至可当做初始化来用,显然是先条用base的

回答2:

你这样写..当然可有可无啊~

因为你自己隐藏了 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);

回答3:

你可以理解成默认值,如果你的子类没赋值 只是调用,就会实现父类的。

一时很难给你说清楚,等你学了接口之后你可能会理解的深刻一点。

回答4:

执行结果22,是因为先执行了BaseClass的构造函数,然后又执行了SonClass 的构造函数,不写: base(),也会调用父类的构造函数。你这种写法是显示调用,可以让代码更清晰,不写就是默认调用了。

回答5:

C#里执行构造函数的顺序是从父--》子这样来执行的。最先调用最基类的构造函数,然后一层层往下执行。虽然你用了Base()来调用父类的构造函数,但是你在构造函数里有对i和j进行了初始化。所以你子类的构造函数会屏蔽父类的。
如果你就想用父类的构造函数,那里子类就直接用Base()就行了。