class Program
{
static void Main(string[] args)
{
B b = new B(); // ① 首先实例化B时,执行B的构造函数,跳转到②
b.PrintFields(); //④ //此处输出x= 1 y = -1
Console.ReadKey();
}
}
class A
{
public A() //③
{
PrintFields(); //执行此代码(实际上是B的方法),是B继承了A的构造函数吗?????疑问。。。 此处输出x=1,y=0.还未调用B的构造函数。 再跳转到②
}
public virtual void PrintFields() { }
}
class B : A
{
int x = 1;
int y;
public B() //② 由于B继承A,先执行A的构造函数,跳转到③
{
y = -1; //由③跳转回来后执行,初始化完毕 跳转到④
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
{
static void Main(string[] args)
{
B b = new B(); // ① 首先实例化B时,执行B的构造函数,跳转到②
b.PrintFields(); //④ //此处输出x= 1 y = -1
Console.ReadKey();
}
}
class A
{
public A() //③
{
PrintFields(); //执行此代码(实际上是B的方法),是B继承了A的构造函数吗?????疑问。。。 此处输出x=1,y=0.还未调用B的构造函数。 再跳转到②
}
public virtual void PrintFields() { }
}
class B : A
{
int x = 1;
int y;
public B() //② 由于B继承A,先执行A的构造函数,跳转到③
{
y = -1; //由③跳转回来后执行,初始化完毕 跳转到④
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}
输出结果:
x=1,y=0;
x= 1 y = -1
一、
本文详细解析了C#中类继承时构造函数的执行顺序,并通过实例展示了A类和B类之间的关系及如何正确理解构造函数的调用流程。
925

被折叠的 条评论
为什么被折叠?



