1: using System;
2: class A
3: {
4: public virtual void Method()
5: {
6: Console.WriteLine("A.method");
7: }
8: }
9:
10: class B:A
11: {
12: public new virtual void Method()
13: {
14: Console.WriteLine("B.method");
15: }
16: }
17:
18:
19: class C:B
20: {
21: public override void Method()
22: {
23: Console.WriteLine("C.Method");
24: }
25:
26:
27: public static void Main()
28: {
29: A a = new A();
30: B b = new C();
31: A c = b;
32:
33:
34: a.Method();
35:
36: //对于对象b,B是它的申明类,C类是它的实现类,先检查申明类
37: //发现Method()方法是vitual的,接着检查派生类C,发现Method方法被
38: //override修饰,所以就直接调用了C类的Method
39: b.Method();
40:
41: //对以对象c,它的申明类是A,实现类是B,它先检查自己的Method方法,
42: //发现A类的Method()方法是virtual方法,接着往下查找B类的Method方法
43: //发现B类的方法没有使用override,所以它自己调用它父类的方法,即A.method();
44:
45: c.Method();
46:
47: }
48: }
49:
50: