2009-02-28 16 views
1

In VB.NET versuche ich, mit einem Webservice (der nicht geändert werden kann) zu sprechen, um Kundendaten zu erstellen und zu aktualisieren. Der CreateCustomer-Dienst erwartet ein Objekt vom Typ ConsumerPerson, und der ChangeCustomer-Dienst erwartet ein Objekt vom Typ ChangeData.Wie behandle ich zwei ähnliche Typen als einen?

Die Eigenschaften dieser beiden Objekte sind genau gleich, also dachte ich, es wäre klug, die Eigenschaften nur mit einer einzigen Funktion zu setzen.

Ich bin jedoch nicht in der Lage, eine Möglichkeit zu finden, meiner Funktion mitzuteilen, dass ich entweder das ConsumerPerson- oder das ChangeCustomer-Objekt füllen möchte.

Wie kann ich das ohne späte Bindung Probleme machen?

Antwort

1

Eine Schnittstelle klingt wie Ihre beste Vorgehensweise. Hier ist ein kurzer Codeausschnitt. Ich wählte eine einfache Eigenschaft namens "Name" vom Typ String. Es sollte einfach sein, mit den tatsächlichen Eigenschaften in Ihrer Klasse zu ändern.

Public Interface ICustomerData 
    ReadOnly Property Name As String 
End Interface 

Public Class ConsumerPerson 
    Implements ICustomerData 

    Public ReadOnly Property Name As String Implements ICustomerData.Name 
    Get 
     return _name 
    End Get 
    End Property 
End Class 

Public Class ChangeData 
    Implements ICustomerData 

    Public ReadOnly Property Name As String Implements ICustomerData.Name 
    Get 
     return _name 
    End Get 
    End Property 
End Class 
+0

Klingt gut, in der Theorie. Aber wenn ich mir den Code ansehe, merke ich, dass ich ein kleines entscheidendes Detail weggelassen habe: Ich kann auch die ConsumerPerson- oder ChangeData-Klassen nicht ändern. – sebastiaan

+0

@sebastiaan, wenn Sie svcutil.exe verwenden, um Ihre Proxy-Klassen zu generieren, wird es beide Typen partiell machen, was bedeutet, dass Sie die gleiche Schnittstelle implementieren können. –

+0

@darin völlig richtig, das habe ich verpasst! Vielen Dank! – sebastiaan

1

Verwenden Sie eine Schnittstelle!

deklarieren Sie eine Schnittstelle IFoo, und implementieren Sie ihre Mitglieder in Ihren Unterklassen ConsumerPerson und ChangeCustomer. Genau dafür sind Schnittstellen da.

1

Sie erstellen eine Schnittstelle, die beide Klassen implementieren.

0

Ist es nicht möglich, Ihre Funktion mit dem zweiten Datentyp zu überladen?

0

Wenn Sie nicht Ihre Objekte ändern, aber sie die gleichen Feldnamen teilen, könnten Sie die XML-Daten serialisiert und als die andere Klasse deserialisieren. - Sie sollten stark betrachten die Auswirkungen dieser Leistung; Allerdings würde es Ihnen die Funktionalität geben, nach der Sie fragen.

Verwandte Themen