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?
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.
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".
Tags und Links c# implicit-conversion