给出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 :请不要谈话,为什么要这样?'或者'这是一个糟糕的设计'等。
答案 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