4

给定 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();

我可以访问thru的Hello()方法吗?(我可以考虑将 A 暴露为 B 中的属性,但不确定是否有其他方法)Ab

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

PS:请不要谈论“你为什么要这个?” 或“这是一个糟糕的设计”等。

4

3 回答 3

9

不是从外面。

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

public void Foo() { base.Hello(); }   
于 2012-09-04T20:13:10.927 回答
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
于 2012-09-04T20:28:26.833 回答
1

在 c# 中是不可能的。对不起。

于 2012-09-04T20:14:04.713 回答