c# 多态中 Virtual与override的作用

        class A
        {
            public A()
            {
                PrintFields();
            }

            public   void PrintFields()
            {
                Console.WriteLine("123");
            }
        }

        class B : A
        {
            int x = 1;
            int y;
            public B()
            {
                y = -1;
            }

            public new void PrintFields()
            {
                Console.WriteLine("x={0},y={1} ", x, y);
            }
        } 
        public static  void Main()
        {
            B d = new B();
            d.PrintFields();
            Console.ReadKey();
        }



当使用new   B()创建B的实例时,产生什么输出? 

-------------------------------------------- 
========================================= 
x   =1   y   =0 

new   B()后首先执行 
int   x=1; 
int   y; 
再执行B的构造函数时会调用基类构造函数先   于是执行 
public   A() 
    { 
        PrintFields(); 
    } 

而A中的PrintFields方法是virtual方法且B中已经用override关键字实现了该方法  
于是会执行子类B中的PrintFields方法   Console.WriteLine( "x={0},y={1} ",x,y);  
//注意此时还没有执行到B的构造函数   所以   y值为0 

而后才执行到B的构造函数//此时   x=1   y   =-1;

virtual修饰的方法为虚方法,暗示其子类最好有自己的实现 

override修饰的方法为重写方法,表示覆盖了基类原有方法的实现
virtual修饰的方法 

文章转载自http://www.cnblogs.com/zhangzt/archive/2013/05/15/3080263.html

喜欢的朋友请帮忙点个赞!!!
原文地址:https://www.cnblogs.com/mchuang/p/5007732.html