Condividi tramite


Operatori di conversione

Gli operatori di conversione convertono un oggetto di un tipo in un oggetto di un altro tipo. Possono essere impliciti o espliciti. Per eseguire la conversione, gli operatori di conversione impliciti non richiedono la specifica di un cast di tipo nel codice sorgente, mentre quelli espliciti richiedono tale specifica.

Nella firma riportata di seguito è illustrato l'operatore di conversione esplicito della classe Point per la conversione tra un oggetto Point e un oggetto Size.

[Visual Basic]

Public Shared Function op_Explicit( _
ByVal p As Point _
) As Size

[C#]

public static Size op_Explicit(
Point p
);

Non fornire un operatore di conversione se la conversione non è chiaramente prevista dagli utenti finali.

In teoria, per supportare la definizione di un operatore di conversione dovrebbero essere disponibili dati di ricerca degli utenti. In alternativa, è possibile fornire esempi in cui uno o più tipi simili richiedono la conversione.

Non definire operatori di conversione all'esterno del dominio di un tipo.

Int32, Double e Decimal, ad esempio, sono tutti tipi numerici, mentre DateTime non lo è. La conversione di un tipo Double in un tipo DateTime non deve essere implementata come operatore di conversione. Per convertire un tipo in un altro tipo che non si trova nello stesso dominio, utilizzare un costruttore.

Non fornire un operatore di conversione implicito se la conversione può comportare la perdita di dati.

Ad esempio, da Double a Single non deve essere eseguita una conversione implicita poiché il livello di precisione di Double è superiore rispetto a quello di Single. Per le conversioni con perdita di dati può essere opportuno fornire un operatore di conversione esplicito.

Non generare eccezioni da cast impliciti.

Poiché i cast impliciti vengono chiamati dal sistema, è possibile che l'utente non sia consapevole che è in corso una conversione e abbia quindi difficoltà nell'eseguire il debug del codice.

Generare un'eccezione System.InvalidCastException se una chiamata a un operatore di cast determina una conversione con perdita di dati e il contratto dell'operatore non consente conversioni di questo genere.

Portions Copyright 2005 Microsoft Corporation. Tutti i diritti riservati.

Portions Copyright Addison-Wesley Corporation. Tutti i diritti riservati.

Per ulteriori informazioni sulle linee guida di progettazione, vedere “le linee guida di progettazione di Framework: Idiomi convenzioni, e modelli per libro raccolte riutilizzabili .NET„ di Krzysztof Cwalina e brad Abrams, emessi da Addison-Wesley, 2005.

Vedere anche

Altre risorse

Linee guida di progettazione dei membri

Linee guida di progettazione per lo sviluppo di librerie di classi