2010-04-06 6 views
7

Je développe des applications .NET depuis 4 ans. Jusqu'à présent, je n'ai pas eu besoin de créer de conversions implicites pour les classes que j'ai créées.
Pourriez-vous fournir des situations réelles lorsque vous ne pourriez pas faire sans créer des conversions implicites?À quelle fréquence créez-vous des conversions implicites pour vos cours?

Merci

+0

Je ne peux pas penser de vraies raisons au-delà de ce qui est déjà fourni via les types numériques de .NET. – leppie

+2

Cela devrait être wiki communautaire (pas de réponse définitive). Ou reformulé pour demander quand et pourquoi on devrait ou ne devrait pas. Ce serait mieux. –

+0

@Martinho Une réponse a déjà été acceptée, et ce n'est pas encore un wiki de communauté, donc je pense que tout espoir est perdu. :) – bzlm

Répondre

4

Les conversions implicites ne doivent être définies lorsque le type peut être converti en provenance ou à (de préférence à et de) un autre type avec sans perte de données. Un autre critère est que les conversions implicites doivent être relativement peu coûteuses, car le développeur qui utilise votre classe ne saura probablement pas quand les conversions implicites auront lieu.

Un exemple: la conversion entre les systèmes de coordonnées. Un vecteur de coordonnées polaires qui peut être converti en coordonnées cartésiennes, par exemple, pourrait être pratique. Cependant, en raison de l'arrondi du nombre à virgule flottante, il serait préférable de laisser ceci comme une conversion explicite, de sorte que le programmeur doive effectuer un typage pour forcer la conversion.

La conversion implicite peut être justifiée si vous avez deux types de données qui stockent des données dans le même format mais la seule distinction entre les types est sémantique - comment ils sont utilisés ou ce qu'ils signifient. Exemple du monde réel: Conversion entre types de données datetime ayant la même représentation sous-jacente (ou compatible) mais ne différant que par la date de début epoc. Vous les trouverez lors de la migration de bases de code plus anciennes vers des frameworks plus récents où les deux définissent un type datetime mais la sémantique est légèrement différente. La conversion implicite ici (en supposant qu'il n'y ait aucune perte de données) est probablement une bonne idée.

Si vous avez un ensemble de types et que vous avez défini vos propres règles de conversion des types, certaines de ces conversions peuvent être implicites et d'autres explicites en fonction de la «gravité» de la conversion. L'instance principale de l'endroit où j'ai utilisé la conversion implicite lors de l'implémentation d'une classe dans .NET était quand j'implémentais la sémantique Win32 Variant pour la bibliothèque d'exécution Delphi. Win32 et le langage Delphi spécifient un nombre de conversions sur les données Variant qui peuvent être implicites. Si vous n'avez pas trouvé le besoin de créer des conversions implicites, c'est en fait une bonne chose. Juste parce que vous pouvez ne signifie pas que vous devriez. Les conversions implicites existent principalement dans .NET pour permettre aux différents langages de programmation de représenter leur propre sémantique d'une manière qui devrait être interopérable et compréhensible par d'autres langages .NET.

+4

Un bon exemple de la BCL: promotion de la chaîne en XName. Seul le bien vient de cela. –

+0

XName est belle. Un peu étrange de comprendre comment construire avec XNamespace, mais une fois que vous obtenez le motif, il est tellement mignon. – dthorpe

Questions connexes