在 C# 中,派生类可以包含与基类方法同名的方法。
基类方法必须定义为 virtual。
如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。
如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。
如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不是调用基类方法。
可以从派生类中使用 base 关键字调用基类方法。
override、virtual 和 new 关键字还可以用于属性、索引器和事件中。
默认情况下,C# 方法为非虚方法。如果某个方法被声明为虚方法,则继承该方法的任何类都可以实现它自己的版本。若要使方法成为虚方法,必须在基类的方法声明中使用 virtual 修饰符。然后,派生类可以使用 override 关键字重写基虚方法,或使用 new 关键字隐藏基类中的虚方法。如果 override 关键字和 new 关键字均未指定,编译器将发出警告,并且派生类中的方法将隐藏基类中的方法
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: 6: namespace ConsoleApplication1
7: {8: class Program
9: {10: static void Main(string[] args)
11: { 12: 13: Car car1 = new Car();
14: car1.ShowAttribute();15: System.Console.WriteLine("-------------------------");
16: 17: 18: Car car2 = new ConverDaZhong();
19: car2.ShowAttribute();20: System.Console.WriteLine("-------------------------");
21: 22: 23: Car car3 = new Minivan();
24: car3.ShowAttribute();25: System.Console.WriteLine("-------------------------");
26: System.Console.ReadKey(); 27: } 28: 29: 30: } 31: 32: class Car
33: {34: public virtual void ShowAttribute()
35: {36: System.Console.WriteLine("这是一部汽车");
37: } 38: } 39: 40: class ConverDaZhong : Car
41: {42: public new void ShowAttribute()
43: {44: System.Console.WriteLine("这是一部大众汽车.");
45: } 46: } 47: 48: class Minivan : Car
49: {50: public override void ShowAttribute()
51: {52: //base.DescribeCar();
53: System.Console.WriteLine("这是一部MINI汽车");
54: } 55: } 56: 57: }输入 出结果
原文:http://www.cnblogs.com/liulaocai2/p/3578167.html