c# 做了一个小demo,分析一下父子类的运行机制,感觉很有意思,做个备忘。
代码如下:
class A { public A() { PrintFields(); } public virtual void PrintFields() { } } class B : A { int x = 1; int y; public B() { y = -1; } public override void PrintFields() { Console.WriteLine("x={0},y={1}", x, y); } }
那么,当实例化B这个类的时候,会出现什么情况呢?正确答案是输出:
x=1,y=0
实例化B的时候,先对私有字段进行了初始化,然后进入父类的构造函数,由于子类B重写了父类A的方法,所以执行了B类中的重写方法,最后才开始进入B类自己的构造方法中。
调试过程如下图所示,全程F11逐步进行演示:
(完)