2010-04-06 11 views
7

Sviluppo applicazioni .NET da 4 anni. Finora, non ho avuto bisogno di creare conversioni implicite per le classi che ho creato.
Potresti fornire situazioni di vita reale quando non potresti fare a meno di creare conversioni implicite?Con quale frequenza crei conversioni implicite per le tue classi?

Grazie

+0

Non riesco a pensare a nessun motivo reale oltre a quello che è già stato fornito tramite i tipi numerici di .NET. – leppie

+2

Questo dovrebbe essere wiki della comunità (nessuna risposta definitiva). O riformulato per chiedere quando e perché uno dovrebbe o non dovrebbe. Sarebbe meglio. –

+0

@Martinho Una risposta è stata già accettata, e non è ancora wiki della comunità, quindi penso che ogni speranza sia persa. :) – bzlm

risposta

4

conversioni implicite dovrebbero essere definiti solo quando il tipo può essere convertito o da (preferibilmente e da) un altro tipo con senza perdita dei dati. Un altro criterio è che le conversioni implicite dovrebbero essere abbastanza economiche, perché probabilmente lo sviluppatore che utilizza la tua classe non sarà a conoscenza di quando si verificano le conversioni implicite.

Un esempio: conversione tra sistemi di coordinate. Un vettore di coordinate polari in grado di convertire in coordinate cartesiane, ad esempio, potrebbe essere conveniente. Tuttavia, a causa del punto in virgola mobile, sarebbe comunque meglio lasciare questo come una conversione esplicita in modo che il programmatore debba digitare per forzare la conversione.

La conversione implicita può essere giustificata se si dispone di due tipi di dati che memorizzano i dati nello stesso formato ma l'unica distinzione tra i tipi è semantica: il modo in cui vengono utilizzati o il significato. Esempio di mondo reale: conversione tra tipi di dati datetime che hanno la stessa rappresentazione sottostante (o compatibile) ma differiscono solo nella data di inizio di epoc. Li troverai quando esegui la migrazione di codebase più vecchi in framework più recenti in cui entrambi definiscono un tipo datetime ma la semantica è leggermente diversa. La conversione implicita qui (supponendo che non vi sia alcuna perdita di dati) è probabilmente ok e una buona idea.

Se si dispone di un set di tipi e sono state definite le proprie regole per il modo in cui i tipi possono essere convertiti tra di loro, alcune di tali conversioni potrebbero essere implicite e alcune esplicite a seconda della "gravità" della conversione. L'istanza primaria di dove ho usato la conversione implicita quando implementavo una classe in .NET era quando stavo implementando la semantica Variant di Win32 per la libreria di runtime di Delphi. Win32 e la lingua Delphi specificano un numero di conversioni su dati Variant che può essere fatto in modo implicito.

Che non hai trovato la necessità di creare conversioni implicite è in realtà una buona cosa. Solo perché puoi non significa che dovresti. Le conversioni implicite esistono in .NET principalmente per consentire a diversi linguaggi di programmazione di rappresentare la propria semantica in un modo che dovrebbe essere interoperabile e comprensibile da altri linguaggi .NET.

+4

Un buon esempio del BCL: promozione della stringa in XName. Solo il bene viene da questo. –

+0

XName è bellissimo. Un po 'strano per capire come creare con XNamespace, ma una volta ottenuto il pattern è così dolce. – dthorpe