2016-01-23 40 views
2

我期望輸出C在這個程序中。但實際結果是A
請解釋爲什麼程序打印AC#中的多態性。解釋輸出

class A 
{ 
    public virtual void say() 
    { 
     Console.WriteLine ("A"); 
    } 
} 

class B : A 
{ 
    public new virtual void say() 
    { 
     Console.WriteLine ("B"); 
    } 
} 

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

class MainClass 
{ 
    public static void Main (string[] args) 
    { 
     A a = new C(); 
     a.say(); 
    } 
} 

回答

3

這是因爲您在類B中創建了new虛擬方法say()
這種新方法隱藏了原始方法A.say(),所以在類C中,您重寫了此新方法B.say()而不是A.say()

既然你宣佈你的對象爲A

A a = new C(); 

A.say()方法被調用。