2014-09-25 124 views
-5

我有四類:如何停止分配派生類對象的基類指針

class Base 
{ 
    public void printf() 
    { 
     Console.WriteLine("I am from base !!!"); 
    } 
} 

class DerivedA : Base 
{ 
    public void printf() 
    { 
     Console.WriteLine("I am from derived A !!!"); 
    } 
} 

class DerivedB : Base 
{ 
    public void printf() 
    { 
     Console.WriteLine("I am from derived B !!!"); 
    } 
} 

class testProgram 
{ 
    public void print(Base baseClass) 
    { 
     baseClass.printf(); 
    } 
} 

我的目標是當我執行下面的代碼,在第4行,必須再給我編的錯誤。

testProgram tP = new testProgram(); 
tP.print(baseClass); 
tP.print(derivedA); 
tP.print(derivedB); 

我需要做什麼改變?

+0

什麼從3號線的區別呢? – Servy 2014-09-25 14:57:16

+0

不要繼承Base。問題解決了。如果您需要更多幫助,請提供更多信息,但如果派生類無法替代您的基礎,則看起來似乎存在設計問題。 – 2014-09-25 14:57:45

+0

請包含編譯器錯誤。 「它給了我一個錯誤」沒有幫助。 – Gutblender 2014-09-25 14:59:32

回答

0

編譯時通常不會那麼做(在運行時很容易)。

您可以特殊情況特殊類通過提供明確的重載版本:

public void print(Base baseClass)... 

[ObsoleteAttribute("This method not supported for DerivedB.", true)] 
public void print(DerivedB baseClass) {} 

注:這只是有益的,如果你有在編譯時類型:

print(new DerivedB()); // error 
print((Base)new DerivedB()); // success 
+1

這並不妨礙調用具有「基礎」的「DerivedB」實例的方法。 – Servy 2014-09-25 15:44:11

+0

@Servy - 好點,給帖子補充說明。 – 2014-09-25 15:46:20

相關問題