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;