zoukankan      html  css  js  c++  java
  • C#中多态override 和new的区别

    C# 中,派生类可以包含与基类方法同名的方法。

    • 基类方法必须定义为 virtual

    • 如果派生类中的方法前面没有 newoverride 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。

    • 如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。

    • 如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。

    • 可以从派生类中使用 base 关键字调用基类方法。

    • overridevirtualnew 关键字还可以用于属性、索引器和事件中。

    默认情况下,C# 方法为非虚方法

    举个简单列子来看看吧

     public class A
        {
            public virtual void Out()
            {
                Console.WriteLine("come from parent");
            }
        }

        public class B : A
        {
            public override void Out()//注意这个地方的override
            {
                Console.WriteLine("come from child");
            }
        }

    //使用的时候

    A a = (b)new A();//或者A a = new B();

    a.Out();//这个时候会输出come from child

    如果把B类的override变成new

    public class B : A
        {
            public new void Out()//注意这个地方的new,因为使用了new就相当于子类B定义了仅仅们名字和A相同的方法,但是他们之间没有任何关系。所以A调用Oout的时候还是A类自己的Out方法
            {
                Console.WriteLine("come from child");
            }
        }

    A a = (b)new A();

    a.Out();//这个时候会输出come from parent;

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    客户端用mstsc不能用一台设备连接终端服务器的解决办法
    [转]知识管理ABC
    Visual Studio常用小技巧[备忘]
    一套外企的数据库设计面试题
    MSDN中的图形元素和文档约定[备忘]
    设计模式概述
    ASP.Net 4.0中新增加的23项功能[转]
    Dreamweaver 8 的相关使用
    浅谈ThreadPool 线程池
    C#委托的异步调用[学习]
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319376.html
Copyright © 2011-2022 走看看