2013-04-05 83 views
-4

一個noobie問題的位,但嘿嘿。基類擴展對象注入

實施例:

BaseClass bc = new ExtendedClass(); //Assume ExtendedClass inherits from BaseClass 
((BaseClass)bc).ExtendedMethod(); 
bc.ExtendedMethod(); 
((ExtendedClass)bc).ExtendedMethod(); //overridden in ExtendedClass 

ExtendedClass ec = new ExtendedClass(); 
((BaseClass)ec).ExtendedMethod(); 
ec.ExtendedMethod(); 
((ExtendedClass)ec).ExtendedMethod(); //overridden in ExtendedClass 

什麼實現將bc.ExtendedMethod();ec.ExtendedMethod();在運行時調用?他們會不一樣嗎?我假設鑄造的調用將調用該類中的具體實現。

編輯:添加相關標籤。

+3

你爲什麼不給它一個鏡頭自己,建立與基地和子類的示例項目,看看 – Habib 2013-04-05 10:18:53

+0

這只是與僅擴展中出現了方法需要強制是從擴展基類可用對象,我實際上正在看我是否可以阻止這個* ty亞歷克斯*的實際概念,並且實際上有一個有用的地方,以便每個程序員都不必測試這個來找出答案。 – Izzy 2013-04-05 10:31:04

+1

取決於;是ExtendedMethod虛擬? – 2013-04-05 10:37:56

回答

2
public class Base 
{ 
    public void Extends() 
    { 
     Console.WriteLine("Base class"); 
    } 
} 

public class Extend : Base 
{ 
    public new void Extends() 
    { 
     Console.WriteLine("Extend class"); 
    } 
} 


public class Program 
{ 
    public static void Main() 
    { 

     Base b = new Base(); 
     b.Extends(); 

     Extend e = new Extend(); 
     e.Extends(); 

     Base be = new Extend(); 
     be.Extends(); 

     Console.Read(); 

    } 

} 

結果在下面的輸出:

Base class 
Extend class 
Base class 

注意,你也可以使用關鍵字newExtend類隱藏基Extends功能。

public new void Extends() 
{ 

} 
+1

好吧 - 如果你使用虛擬+覆蓋,最後一個是擴展;但如果你使用「新」,最後是基地。 – Izzy 2013-04-05 10:42:05

+0

編輯:虛擬+「新」* – Izzy 2013-04-05 10:50:24

2

在所有三種情況下,將調用ExtendedMethod的替代實現,因爲您正在創建ExtendedClass的實例。畢竟,這就是polymorphism的全部內容。