Как решить эту сложность наследования? - PullRequest
1 голос
/ 07 августа 2011

Я использую класс A из сторонней библиотеки. У класса есть метод M:

public class A
{
    public int M(int x)
    {
        ...
    }
}

Я написал свой класс B по методу M:

public class B : A
{
    public void M(params int[] xs)
    {

    }
}

А потом в классе C Я хочу вызвать метод M родительского класса A

public class C : B
{
    public void M2()
    {
        int result = M(1);
    }
}

Но компилятор помечает эту строку как ошибку. Он пытается использовать метод M класса B, который возвращает void.
Как я могу решить это столкновение, не переписывая класс B?

1 Ответ

6 голосов
/ 07 августа 2011

Я думаю, что ((A)this).M(1) поможет вам. Обратите внимание, что если эти методы являются виртуальными / переопределенными где-то - все может измениться.

Сказав это, я думаю, что такой способ сокрытия - плохая идея, сообщающая либо о неудачном выборе дизайна, либо о некотором хакерстве. По крайней мере, я не могу придумать, когда мне это действительно нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...