2010-02-04 20 views
2

J'ai une référence de service Web .NET à un WSDL tiers.Joindre 2 classes - essentiellement

Dans cette référence sont 2 classes. Fondamentalement, ces 2 classes sont probablement des interfaces du côté de l'API tierce, mais dans .NET se terminent par 2 classes proxy.

J'ai besoin de combiner ces deux classes en une seule classe. Pourquoi? Parce que c'est stupide que ceux-ci soient fractionnés, ils sont le service qui me permet de faire des appels de méthode. Les appels de méthode sont tous répartis entre la moitié et la moitié entre ces deux classes de proxy. Donc je veux créer une classe wrapper personnalisée appelée ThirdPartyService et hériter en quelque sorte essentiellement les deux membres de la classe proxy. Je sais que vous pouvez hériter de 2 classes en C# mais je ne vois pas non plus comment le faire avec une interface.

Répondre

5

Eh bien, vous ne nous avez pas donné beaucoup de travail avec, mais vous pourriez le faire en utilisant la composition.

class Foo { 
    public void Frobber(); 
} 

class Bar { 
    public void Blorb(); 
} 

Puis

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(); } 
} 

Si Foo et Bar implémenter des interfaces IFoo et IBar respectivement alors vous pouvez avoir FooAndBar mettre en œuvre trop IFoo et IBar.

Dans la langue de Design Patterns, nous appellerions cela le adapter pattern.

En ce qui concerne votre édition:

Je sais que vous pouvez hériter 2 classes en C#, mais je ne vois pas comment faire cela avec une interface non plus.

Non, vous ne peut hériter de deux classes en C#. Vous devez utiliser la composition comme je l'ai déjà expliqué.

+1

ReSharper a une option pour générer de déléguer des membres de simplifier ce genre de chose. Très utile. –

+0

Cela semble à peu près juste. Peut-être pensait-il que Foo et Bar implémenteraient IFoo et IBar, alors FooAndBar implémenterait les deux. –

+0

J'ai utilisé ServiceA, B et Z et "DoThis" et "DoThat" mais ouais, c'est ce que j'allais dire :) – flq

0

Peut-être que pour ajouter une valeur au poste de Jason, ce genre de choses serait également connu sous le nom adapter

+0

Je suppose que j'espérais une réponse très directe à mon problème. Ne semble pas qu'il y en a un. – PositiveGuy