dinesh_redhawk Ответов: 2

Вопрос интервью - C#, множественное наследование, интерфейсы


Всем Привет,

Недавно мне задали вопрос в одном из интервью:

Существует библиотека dll, которая имеет 2 класса
Class A
{
Method A(){...}
}

Class B
{
Method B(){...}
}


В отдельной программе есть еще один класс с
Теперь, как я могу наследовать оба класса B и A в классе C, ничего не изменяя в dll?

Так как же этого добиться?
Пожалуйста, помогите мне получить ответ на этот глупый вопрос.

Что я уже пробовал:

Поскольку множественное наследование не поддерживается в C#, я не могу дать Класс C:B, A
И поскольку я не могу ничего изменить в dll, я также не могу реализовать интерфейсы..

2 Ответов

Рейтинг:
11

F-ES Sitecore

Я бы ответил, что вы не можете. Некоторые интервьюеры задают вам такие вопросы, чтобы проверить вашу уверенность и понять, обладаете ли вы подлинными знаниями или просто пытаетесь играть в процесс собеседования.


Рейтинг:
0

Bernhard Hiller

Зависит.
Вы могли бы сказать: вовсе нет, так как множественного наследования в C#не существует.
Вы могли бы сказать: давайте воспользуемся некоторыми трюками. Как это:

Interface IA
{
    Method A();
}
Interface IB
{
    Method B();
}

Затем давайте добавим несколько оболочек, которые реализуют интерфейсы и просто переходят к исходным классам:
class AWrapper : IA
{
    A _Instance;
    AWrapper()
    {
        _Instance = new A();
    }

    Method A ()
    {
        _Instance.A();
    }
}
и то же самое для Б.
Теперь мы можем изменить C:
class C: IA, IB
{
    IA _AInstance;
    IB _BInstance;
    C()
    {
        _AInstance = new AWrapper();
        _BInstance = new BWrapper();
    }

    Method A()
    {
        _AInstance.A();
    }

    Method B()
    {
        _BInstance.B();
    }
}
Ну, не совсем наследование, скорее агрегация.


[no name]

трюк, который вы предложили, я сказал то же самое, но он просто отверг его, сказав, что вы не можете ничего изменить в dll. Так что у меня не было выбора..

За этот простой вопрос он отверг меня, несмотря на то, что я сказал, что это невозможно. :(

Bernhard Hiller

Это ничего не меняет во внешней библиотеке dll. Так что радуйся, что он так быстро тебя отверг, это лучше, чем потом узнать, что он идиот...