zoukankan      html  css  js  c++  java
  • c#中关于virtual,override和new的理解

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
    
    
        class Program
        {
            static void Main(string[] args)
            {
                father _father = new son1();
                _father.printclassname();
                son _son = new son1();
                _son.printclassname();
                son0 _son0 = new son1();
                _son0.printclassname();
    
            }
        }
        public class father
        {
            public father() { }
            public void printclassname()
            {
                Console.WriteLine("father");
            }
        }
       public  class son : father
        {
            public son() { }
            public new virtual void printclassname()
            {
                Console.WriteLine("son");
            }
        }
       public class son0 : son
       {
           public son0() { }
           public new virtual void printclassname()
           {
               Console.WriteLine("son0");
           }
       }
        public class son1 : son0
        {
            public son1() { }
            public override void printclassname()
            {
                Console.WriteLine("son1");
            }
        }
    }

    运行结果:

    1.override修饰符指的是覆盖,实现动态调用,整个基础体系中必须要有一个virtual,一般为最顶层的父类用virtual,子类全部用override修饰,(但是不一定是最顶层用virtual,有可能是中间某一成开始用virtual,这时候的virtual需要和new修饰符一起使用,表示隐藏基类(把“非虚”功能也隐藏了,变成了“虚”),从此该函数开始变为虚函数了)以实现函数的重载,实现自己特定的功能。

    2.new表示隐藏基类,这一点和C++中普通重载(非多态)是一样的。

  • 相关阅读:
    Android_PopupWindow提示框
    视图字段对应属性列表
    odoo 关系字段(关联关系)
    odoo字段属性
    odoo xml中添加数据的数字代表含义
    odoo 常用模型的简写
    odoo标识符
    odoo 权限文件说明
    Odoo的菜单项
    Odoo的 数据添加修改删除代码和对应的方式
  • 原文地址:https://www.cnblogs.com/JMLiu/p/5496378.html
Copyright © 2011-2022 走看看