爱猫的狗

拥抱变化

导航

一段有关 override / new 的小程序

using System;

class A
{
    
public virtual void Foo()
    
{
        Console.WriteLine(
"Call on A.Foo()"); 
    }

}


class B : A
{
    
public virtual void Foo()
    
{
        Console.WriteLine(
"Call on B.Foo()"); 
    }

}


class C : B
{
    
public override void Foo()
    
{
        Console.WriteLine(
"Call on C.Foo()"); 
    }


}


class D
{
    
/* 因为 class B 没有 override 基类的 Foo() 实现,所以打印出了 "Call on A.Foo()". 
     * 缺乏合适的 overriding 的情况下,程序调用了 c1 所声明的的类型 A 中的 Foo(). 
     
*/

    
static void Main()
    
{
     
        A c1 
= new C(); 
        c1.Foo();
        Console.ReadLine();
   
    }
 
}
    程序的结果很有意思。如果把 class B 的 Foo() 方法的签名变成  public virtual new void Foo(),结果也是一样的。

posted on 2005-03-14 17:04  anf  阅读(381)  评论(0编辑  收藏  举报