C#之virtual override new解析

温故而知新,是智也。

virtual允许派生类重写该方法。默认情况下方法是非虚的,不允许重写。

override重写基类具有相同签名的方法,不可重写非虚方法和静态方法,对应基类同名方法的关键字是virtualabstract

new常用于:作为运算符,创建对象及调用构造函数;作为修饰符,隐藏基类具有相同签名的方法;用于泛型约束,约束参数类型。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace ConsoleApplication
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             MyChild mychild = new MyChild();
14             MyBase mybase1 = new MyBase();
15             MyBase mybase2 = mychild;
16 
17             mybase1.Say();  //MyBase.Say
18             mybase2.Say();  //MyBase.Say
19             mychild.Say();  //MyChild.Say
20 
21             mybase1.Speak();    //MyBase.Speak
22             mybase2.Speak();    //MyChild.Speak,注意这里不是MyBase.Speak
23             mychild.Speak();    //MyChild.Speak
24 
25             mybase1.Talk(); //MyBase.Talk
26             mybase2.Talk(); //MyBase.Talk
27             mychild.Talk(); //MyChild.Talk
28 
29             mybase1.Tell(); //MyBase.Tell
30             mybase2.Tell(); //MyBase.Tell
31             mychild.Tell(); //MyChild.Tell
32 
33             Console.ReadKey();
34         }
35     }
36 
37     class MyBase
38     {
39         public virtual void Say() { Console.WriteLine("MyBase.Say"); }
40         public virtual void Speak() { Console.WriteLine("MyBase.Speak"); }
41         public virtual void Talk() { Console.WriteLine("MyBase.Talk"); }
42         public void Tell() { Console.WriteLine("MyBase.Tell"); }
43     }
44     class MyChild : MyBase
45     {
46         public new void Say() { Console.WriteLine("MyChild.Say"); }    //new修饰符显式隐藏基类方法
47         public override void Speak() { Console.WriteLine("MyChild.Speak"); }   //override修饰符重写基类方法
48         public void Talk() { Console.WriteLine("MyChild.Talk"); }   //隐式隐藏基类方法
49         public void Tell() { Console.WriteLine("MyChild.Tell"); }   //隐式隐藏基类方法
50     }
51 }
原文地址:https://www.cnblogs.com/maiaimei/p/7405472.html