2014-09-25 108 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

相关问题