using System; class A { publicvirtualvoid Foo() { Console.WriteLine("Call on A.Foo()"); } } class B : A { publicvirtualvoid Foo() { Console.WriteLine("Call on B.Foo()"); } } class C : B { publicoverridevoid Foo() { Console.WriteLine("Call on C.Foo()"); } } class D { /**//* 因为 class B 没有 override 基类的 Foo() 实现,所以打印出了 "Call on A.Foo()". * 缺乏合适的 overriding 的情况下,程序调用了 c1 所声明的的类型 A 中的 Foo(). */ staticvoid Main() { A c1 =new C(); c1.Foo(); Console.ReadLine(); } }
程序的结果很有意思。如果把 class B 的 Foo() 方法的签名变成 public virtual new void Foo(),结果也是一样的。
posted on
2005-03-14 17:04anf
阅读(381)
评论(0)
编辑收藏举报