4

是否可以调用基础方法的基础?IE不是派生类的“直接”祖先?

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

    }
}
4

2 回答 2

4

不,这是不可能的,而且违反了 OOP 原则。如果您需要这样做,您可能设计错误的系统。

于 2012-09-17T10:18:02.297 回答
3

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

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

但我会重新考虑设计。跳过覆盖会散发出糟糕设计的味道,并会破坏基类的封装。

于 2012-09-17T10:18:26.880 回答