Mit einer Schnittstelle ein Objekt von einem Typ in einen anderen konvertieren?

9

Angenommen, ich habe zwei Klassen mit derselben Schnittstelle:

%Vor%

Angenommen, ich habe eine Instanz von ISomeInterface, die eine SomeClass darstellt. Gibt es eine einfache Möglichkeit, das in eine neue Instanz von SomeOtherClass zu kopieren, ohne jedes Mitglied von Hand zu kopieren?

UPDATE: Für den Datensatz versuche ich nicht , die Instanz von SomeClass in die Instanz von SomeOtherClass zu konvertieren. Was ich gerne tun würde, ist etwa so:

%Vor%

Ich möchte das nicht für jedes von Hand machen müssen, da diese Objekte viele Eigenschaften haben.

    
Jason Baker 19.11.2008, 22:05
quelle

9 Antworten

3

"Würdest du mir ein Beispiel geben, wie ich das machen kann (oder zumindest auf die richtigen Methoden hinweisen)? Ich kann sie nicht auf MSDN finden" - Jason Bäcker

Jason, etwas wie das Folgende:

%Vor%

Ich würde vorschlagen, ein Werkzeug zu schreiben, um den Code auszuspucken, den Sie für einen Kopierkonstruktor brauchen, anstatt es zur Laufzeit reflektiv zu machen - was weniger performant wäre.

    
Winston Smith 19.11.2008, 23:10
quelle
9

Sie können implizite Operatoren in jeder Klasse erstellen, um die Konvertierung für Sie durchzuführen:

%Vor%

und dann SomeOtherClass soc = sc; und umgekehrt würden funktionieren.

    
Adam Lassek 19.11.2008 22:27
quelle
6

Ist das nicht der Punkt einer Schnittstelle, um das nicht zu tun? Machst du etwas mit der konkreten Implementierung von SomeOtherClass? Anstatt die konkrete Implementierung zu verwenden, verwenden Sie die Schnittstelle und es sollte keine Rolle spielen, wenn Sie SomeClass oder SomeOther Klasse verwenden.

Abgesehen davon ist es am besten, wenn Sie eine Art Hilfsfunktion schreiben (Sie müssen es immer noch manuell tun oder nachdenken), die jede Eigenschaft auf der Oberfläche kopiert, die so aussehen würde:

%Vor%

Mein erster Instinkt wäre jedoch zu sagen, dass Sie sich von der Implementierung fernhalten und sich stattdessen auf Ihr Interface konzentrieren sollten, dann ist es egal, was darunter liegt.

    
mendicant 19.11.2008 22:12
quelle
4

Reflexion ... Schleife durch jede Eigenschaft und setze sie auf die entsprechende Eigenschaft auf dem anderen Objekt.

    
Joel Martinez 19.11.2008 22:08
quelle
4

Sieh dir Joes Antwort für die Reflection-Lösung an.

Ich nehme an, dass Sie Visual Studio verwenden.

Kennen Sie die Tastenkombinationen Strg + Umschalt + R und Strg + Umschalt + P? Wenn nicht, beginnt / beendet ctrl + shift + r die Aufzeichnung eines Tastendruck-Makros. ctrl + shift + p spielt das aufgezeichnete Makro ab.

Was ich getan habe, als ich viele Eigenschaften eingestellt habe, ist, die Eigenschaftsdeklarationen dorthin zu kopieren, wo sie gesetzt werden sollen, und ein Makro aufzuzeichnen, um die Deklaration in eine set-Anweisung umzuwandeln und den Cursor in die nächste Zeile zu bewegen , dann spiele ich es einfach, bis ich alle gesetzten Anweisungen erledigt habe.

    
CrashCodes 19.11.2008 23:31
quelle
3

Nein, um ein Objekt transparent von einem Typ in einen anderen umzuwandeln, muss die zugrundeliegende konkrete Klasse des Objekts, das Sie haben, von der Klasse erben, in die Sie es umwandeln wollen, selbst wenn beide dasselbe implementieren Schnittstelle.

Denken Sie darüber nach, dass alle zwei Objekte, die dieselbe Schnittstelle implementieren müssen, dieselbe Untermenge von Methodensignaturen sind. Sie haben möglicherweise (wahrscheinlich nicht) sogar die gleichen Eigenschaften oder Datenfelder.

    
Charles Bretana 19.11.2008 22:10
quelle
3

würde das nicht funktionieren?

%Vor%

Sie müssen nur anrufen: MyClass.Clone ().

    
netadictos 19.11.2008 22:13
quelle
3
%Vor%     
tvanfosson 19.11.2008 23:53
quelle
2

Ich mochte das Folgende und es funktioniert nur sehr gut, um von einem Objekt in ein anderes mit implizitem Operator zu konvertieren:

%Vor%     
Pankaj Awasthi 08.12.2010 20:56
quelle

Tags und Links