C # fügt implizite Konvertierungen zu bestehenden Typen hinzu

8

Gibt es in C # eine Möglichkeit, implizite Konvertierungen zu bereits in anderen Assemblys definierten Typen hinzuzufügen?

Wenn ich zum Beispiel zwei verschiedene Assemblies verwende, die jeweils ihr eigenes Vector3 struct bereitstellen und in ihren APIs verwenden, wäre es nett, einmal eine Conversion definieren zu können und dann einfach ein Foo.Vector3 zu übergeben. zu einer Methode, die eine Bar.Vector3 erwartet und sie automatisch konvertiert konvertiert.

Wenn ich die Quelle für die Bibliotheken hätte, könnte ich implizite Konvertierungsoperatoren hinzufügen. Ohne diese Quelle mache ich gerade die Konvertierung explizit selbst mit einer Hilfsfunktion jedes Mal. Ich hoffe auf einen besseren Weg.

Ich weiß, dass ich mein eigenes Vector3 struct mit impliziten Konvertierungsoperatoren zu und von den anderen zwei Strukturen erzeugen könnte, aber dies würde nicht alle Fälle lösen, in die ich direkt ein Objekt übergeben möchte ein (extern definierter) Typ für eine Methode, die die andere erwartet.

Bonusfrage : Gibt es etwas, das Autoren von Bibliotheken, die Dinge wie eine Vector3-Struktur in ihrer API offenlegen, tun sollten, um die Benutzerfreundlichkeit in dieser Hinsicht zu erleichtern?

    
Ergwun 21.01.2011, 02:22
quelle

2 Antworten

10

Sie können eine implizite Konvertierung von und zu einem Drittanbietertyp für jeden Typ, den Sie selbst erstellen, bereitstellen, aber Sie können keine Unterstützung für die implizite Konvertierung zwischen zwei Drittanbietertypen hinzufügen.

Sie könnten die Eleganz der Konvertierung zwischen den beiden Typen etwas verbessern, indem Sie beiden Vector3-Typen Erweiterungsmethoden hinzufügen;

%Vor%

Das ist das Beste, was Sie erwarten können.

    
Bradley Smith 21.01.2011, 02:27
quelle
2

Leider können Sie keine impliziten Konvertierungen hinzufügen, die in und von einem Typ konvertiert werden, den Sie nicht ändern können. Ich hätte die von dir erwähnte Problemumgehung empfohlen, aber du hast es bereits erwähnt:).

Ich fürchte, sogar die Antwort auf Ihre Bonusfrage lautet "Sie können nicht".

    
Timwi 21.01.2011 02:29
quelle

Tags und Links