使用派生类对象访问重写的基类成员(C#)

时间:2012-09-04 20:10:38

标签: c# inheritance

给出2种类型

class A { public virtual void Hello() { Console.WriteLine("A"); } }
class B : A { public override void Hello() { Console.WriteLine("B"); } }

以及' B' B b = new B();

我可以访问Hello() A b方法吗? (我可以想到在A中暴露A作为属性,但不确定是否有其他方式)

我知道c++这是可能的,但是在c#中我的头脑。

PS :请不要谈话,为什么要这样?'或者'这是一个糟糕的设计'等。

3 个答案:

答案 0 :(得分:9)

不是来自外面。

内部,实例可以通过base.Hello()调用它,以便您可以添加:

public void Foo() { base.Hello(); }   

答案 1 :(得分:1)

在c#中是不可能的。遗憾。

答案 2 :(得分:1)

你可以试试阴影:

class A { public virtual void Hello() { Console.WriteLine("A"); } }
class B : A { public new void Hello() { Console.WriteLine("B"); } }

然后你可以这样做:

        A b = new B();
        b.Hello(); //prints A
       (B)b).Hello(); //prints B

       B b1 = new B();
       b1.Hello(); //prints B