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 に答える