zoukankan      html  css  js  c++  java
  • C#之重写与隐藏

    一 重写与隐藏区别

    (1)方法重写:就是在基类中的方法用virtual关键字来标识,然后在继承类中对该类进行重写(override),这样基类中的方法已经被重写了,已经失去了功能了。当让基类的对象的引用直接指向继承类的对象时(多态性),调用该方法则是调用的继承类的方法。

    (2)方法隐藏:无论基类中的方法是否用了virtual关键字,继承类中都可以用new关键字(如果不用new的话,不会产生错误,但会生成一个编译警告)将基类中的方法隐藏,所谓隐藏就是隐藏,不像重写,重写就是原来的(基类中)已经不存在了,而隐藏是原来的还存在。所以当让基类的对象的引用直接指向继承类的对象时(多态性),调用该方法则是调用的基类的方法。

        public class BaseClass
        {
            public void functionA()
            {
                Console.WriteLine("BaseFunctionA ");    
            }
            public virtual void functionB()        //虚函数,在继承类中被重写,使用关键字:override
            {
                Console.WriteLine("BaseFunctionB ");
            }
        }
       public class DerivedClass:BaseClass
        {
            public new void functionA()     //隐藏基类中同名函数,使用关键字new
            {
                Console.WriteLine("DerivedFunctionA");
            }
            public override void functionB()
            {
                Console.WriteLine("DerivedFunctionB ");
            }
        }

    验证:

           BaseClass MyBaseClass = new DerivedClass();

           MyBaseClass.functionA();

           MyBaseClass.functionB();

    结果:

        BaseFunctionA

        DerivedFunctionB 

        说明:MyBaseClass.functionA()调用基类该方法,原因该方法只是被隐藏但并未重写仍然存在。MyBaseClass.functionB()调用继承类该方法,原因积累中该方法被重写即被覆盖,可以理解为该方法在基类中不存在了。

        

  • 相关阅读:
    Spring MVC 核心组件详解
    Spring MVC 入门就这一篇
    Spring 事务解决方案
    【UGUI源码分析】Unity遮罩之Mask详细解读
    游戏开发中不同时区下的时间问题
    ARTS第十三周(阅读Tomcat源码)
    Win10 电脑安装.NET低版本提示“这台计算机中已经安装了 .NET Framwork 4.6.2或版本更高的更新”问题
    Dynamics 365 Setup 提示SqlServer 存在
    Dynamics CRM "Verification of prerequisites for Domain Controller promotion failed. Certificate Server is installed."
    Dynamics CRM
  • 原文地址:https://www.cnblogs.com/xingyuanzier/p/10269447.html
Copyright © 2011-2022 走看看