2010-02-04 3 views
2

У меня есть ссылка на веб-службу .NET для стороннего WSDL.Присоединяйтесь к 2 классам - по существу

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

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

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

ответ

5

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

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 тоже.

На языке Design Patterns мы бы назвали это adapter pattern.

Что касается вашего редактирования:

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

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

+1

Resharper имеет возможность генерировать делегировании членов упростить этот тип вещи. Очень полезно. –

+0

Это выглядит правильно. Возможно, он думал, что Foo и Bar реализуют IFoo и IBar, поэтому FooAndBar также будет реализовывать оба. –

+0

Я использовал ServiceA, B и Z и «DoThis» и «DoThat», но да, вот что я собирался сказать :) – flq

0

Может добавить некоторое значение поста Джейсона, такого рода вещи будут также известны как adapter

+0

Наверное, я надеялся на очень прямой ответ на мою проблему. Не похоже, что он есть. – PositiveGuy

Смежные вопросы