Записаться на 2 занятия - по сути - PullRequest
2 голосов
/ 04 февраля 2010

У меня есть ссылка на веб-сервис .NET для стороннего WSDL.

В этой ссылке 2 класса. По сути, эти 2 класса, скорее всего, являются интерфейсами на стороне стороннего API, но в .NET в конечном итоге становятся 2 прокси-классами.

Мне нужно объединить оба этих класса в один класс. Зачем? Поскольку глупо, что они разделены, это сервис, который позволяет мне делать вызовы методов. Все вызовы метода делятся пополам между этими двумя прокси-классами.

Итак, я хочу создать собственный класс-обертку с именем ThirdPartyService и каким-то образом по существу наследовать оба члена этого прокси-класса. Я знаю, что вы можете наследовать 2 класса в C #, но я не вижу, как это сделать с помощью интерфейса.

Ответы [ 2 ]

5 голосов
/ 05 февраля 2010

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

class Foo {
    public void Frobber();
}

class Bar {
    public void Blorb();
}

Тогда

class FooAndBar {
    Foo _foo;
    Bar _bar;
    public FooAndBar(Foo foo, Bar bar) {
        _foo = foo;
        _bar = bar;
    }

    public void Frobber() { _foo.Frobber(); }
    public void Blorb() { _bar.Blorb(); }
}

Если Foo и Bar реализуют интерфейсы IFoo и IBar соответственно, тогда вы можете иметь FooAndBar агрегат IFoo и IBar.

На языке Шаблоны проектирования мы бы назвали это шаблон адаптера .

Относительно вашего редактирования:

Я знаю, что вы можете наследовать 2 класса в C #, но я не вижу, как это сделать с помощью интерфейса.

Нет. Вы не можете наследовать от двух классов в C #. Вы должны использовать композицию, как я уже объяснил.

0 голосов
/ 05 февраля 2010

Может быть, добавить некоторое значение к сообщению Джейсона, этот тип материала также известен как адаптер

...