如何停止将派生类对象分配给基类指针

时间:2014-09-25 14:54:06

标签: c# inheritance

我有四个班级:

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);

我需要做哪些改变?

1 个答案:

答案 0 :(得分: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