zoukankan      html  css  js  c++  java
  • 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

    喜欢的朋友请帮忙点个赞!!!
  • 相关阅读:
    vue关于样式的绑定
    vue插口
    vue组件 父子 通讯
    vue实现翻页功能加高阶函数加购物车
    MySQL 索引面试总结
    phpstorm配置git并解决Terminal 中文乱码(Unicode 编码)的方法
    php 下载图片并打包成Zip格式压缩包
    MySQL5.6升级到5.7详细教程
    windows下安装vue教程
    一致性hash算法详解
  • 原文地址:https://www.cnblogs.com/mchuang/p/5007732.html
Copyright © 2011-2022 走看看