2012-09-27 38 views
2

OOP中討論的特性/主題之一是虛擬成員。我期待在一份聲明如下:運行時類型的虛擬成員調度

虛擬成員運行時類型派遣

這是否意味着虛擬方法依賴於對象類型(S)的被接受或處理,而變量類型?

任何更正或評論將不勝感激。

感謝, 阿米特

回答

7

號它無關,該方法接受那些應爲每個執行相同的參數。這意味着虛擬方法將在運行時根據調用方法的類型來解析。試想一下:

public class Parent 
{ 
    public virtual string SayHi() 
    { 
     return "Hi!"; 
    } 
} 

public class NiceChild : Parent 
{ 
    public override string SayHi() 
    { 
     return "Hello World!"; 
    } 
} 

public class MeanChild : Parent 
{ 
    public override string SayHi() 
    { 
     return "You suck!"; 
    } 
} 

現在,我們有一個方法:

public void PrintHi(Parent instance) 
{ 
    Console.WriteLine(instance.SayHi()); 
} 

你可以調用該方法的三種方式之一,但不知道結果如何,直到運行時,如果你看到的一切都是上面的方法:

PrintHi(new Parent()); // Hi 
PrintHi(new NiceChild()); // Hello World! 
PrintHi(new MeanChild()); // You suck! 
+0

很好的解釋!謝謝Justin。 –