调用非直接相对类的方法

时间:2012-09-17 10:16:29

标签: c# inheritance

是否可以调用基本方法的基础? I.E.不是'直接'派生类的祖先?

public class a
{
    public virtual void test() { }
}

public class b : a
{
    public override void test()
    {
        //...
        base.test();
    }
}

public class c : b
{
    public override void test()
    {
        //...
        //possible to call test() in  class a, without calling it in class b? 
        //((a)base).test(); //doesnt work

    }
}

2 个答案:

答案 0 :(得分:4)

不,这是不可能的,违背了OOP原则。如果你需要这样做,你可能会错误地设计你的系统。

答案 1 :(得分:3)

不是用C#。 C#只允许您在直接基类上调用方法。

另一方面,CLR允许它。您可以通过反射或直接编写IL来实现。我假设C ++ / CLI也支持这一点。

但我会重新考虑这个设计。跳过覆盖有害设计的气味并打破基类的封装。