2011-01-21 2 views
8

C'è un modo in C# per aggiungere conversioni implicite a tipi già definiti in altri assembly? Ad esempio, se sto utilizzando due assembly diversi ognuno dei quali fornisce il proprio Vector3 struct e lo utilizza nelle sue API, sarebbe bello poter definire una conversione una volta e quindi passare semplicemente un Foo.Vector3 a un metodo quello si aspetta uno Bar.Vector3 e lo ha automaticamente convertito.C# aggiungendo conversioni implicite a tipi esistenti

Se avessi il sorgente per le librerie, potrei aggiungere operatori di conversione impliciti. Senza questa fonte, sto facendo la conversione esplicitamente con una funzione di aiuto ogni volta. Sto sperando in un modo migliore.

mi rendo conto ho potuto creare il mio Vector3 struct con operatori di conversione implicita da e per gli altri due struct, ma questo non risolverebbe tutti i casi dove voglio direttamente passaggio un oggetto di una (definita esternamente) tipo a un metodo che aspetta l'altro.

domanda bonus: c'è qualche autore di librerie che espone cose come una struct Vector3 nella loro API dovrebbe fare per facilitare la facilità d'uso in questo senso?

+0

gestori di interni .. Mi piace :) – nawfal

risposta

10

È possibile fornire la conversione implicita a-e-da un tipo di terze parti per qualsiasi tipo di autore, ma non è possibile aggiungere supporto per la conversione implicita tra due tipi di terze parti.

È possibile migliorare l'eleganza della conversione tra i due tipi aggiungendo metodi di estensione a entrambi i tipi di Vector3;

public static Bar.Vector3 ToBarVector3(this Foo.Vector3 foo) { 
    return /* instance of Bar.Vector3 */ 
} 

public static Foo.Vector3 ToFooVector3(this Bar.Vector3 bar) { 
    return /* instance of Foo.Vector3 */ 
} 

Questo è il meglio che puoi aspettarti di ottenere.

2

Purtroppo non è possibile aggiungere conversioni implicite che convertono in e da un tipo che non è possibile modificare. Avrei raccomandato la soluzione che hai menzionato, ma l'hai già menzionata :).

Ho paura anche che la risposta alla tua domanda bonus sia "non puoi".