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注册。

原文地址:https://www.cnblogs.com/zjypp/p/2319376.html