2010-04-06 2 views
7

Ich entwickle seit 4 Jahren .NET-Anwendungen. Bisher musste ich keine impliziten Konvertierungen für die von mir verfassten Klassen erstellen.
Können Sie reale Situationen bereitstellen, in denen Sie nicht ohne implizite Konvertierungen auskommen könnten?Wie oft erstellen Sie implizite Conversions für Ihre Klassen?

Danke

+0

Ich kann mir keine wirklichen Gründe vorstellen, die über die numerischen Typen von .NET hinausgehen. – leppie

+2

Dies sollte Community-Wiki sein (keine definitive Antwort). Oder umformuliert um zu fragen, wann und warum man sollte oder nicht. Das wäre besser. –

+0

@Martinho Eine Antwort wurde bereits akzeptiert, und es ist immer noch kein Community-Wiki, also denke ich, dass alle Hoffnung verloren ist. :) – bzlm

Antwort

4

Implizite Konvertierungen nur definiert werden soll, wenn der Typ konvertiert werden kann oder von (vorzugsweise auf und aus) einem anderen Typ mit keinen Verlust von Daten. Ein weiteres Kriterium ist, dass implizite Conversions relativ kostengünstig sein sollten, da der Entwickler, der Ihre Klasse verwendet, wahrscheinlich nicht weiß, wann die impliziten Conversions stattfinden.

Ein Beispiel: Konvertierung zwischen Koordinatensystemen. Ein Polarkoordinatenvektor, der z. B. in kartesische Koordinaten umgewandelt werden kann, könnte zweckmäßig sein. Aufgrund der Gleitkommarundung wäre es jedoch immer noch besser, dies als eine explizite Konvertierung zu belassen, so dass der Programmierer eine Typumwandlung durchführen muss, um die Konvertierung zu erzwingen.

Implizite Konvertierung kann gerechtfertigt sein, wenn Sie zwei Datentypen haben, die Daten im selben Format speichern, aber die einzige Unterscheidung zwischen den Typen ist semantisch - wie sie verwendet werden oder was sie bedeuten. Beispiel für eine reale Welt: Konvertierung zwischen Datetime-Datentypen, die die gleiche (oder kompatible) zugrunde liegende Darstellung haben, sich jedoch nur im epoc-Startdatum unterscheiden. Sie finden diese beim Migrieren älterer Codebasen zu neueren Frameworks, wo beide einen Datetime-Typ definieren, die Semantik jedoch leicht unterschiedlich ist. Implizite Konvertierung hier (vorausgesetzt, es gibt überhaupt keinen Datenverlust) ist wahrscheinlich in Ordnung und eine gute Idee.

Wenn Sie eine Reihe von Typen haben und eigene Regeln definiert haben, wie die Typen untereinander konvertiert werden können, können einige dieser Konvertierungen implizit und einige explizit abhängig vom "Schweregrad" der Konvertierung sein. Die primäre Instanz, in der ich implizite Konvertierung bei der Implementierung einer Klasse in .NET verwendet habe, war die Implementierung der Win32 Variant-Semantik für die Delphi-Laufzeitbibliothek. Win32 und die Delphi-Sprache geben eine Anzahl von Konvertierungen für Variant-Daten an, die implizit durchgeführt werden können.

Dass Sie keine Notwendigkeit gefunden haben, implizite Konvertierungen zu erstellen, ist eigentlich eine gute Sache. Nur weil du kannst, heißt das nicht, dass du es tun solltest. Implizite Konvertierungen gibt es in .NET hauptsächlich, um verschiedenen Programmiersprachen zu ermöglichen, ihre eigene Semantik in einer Weise darzustellen, die von anderen .NET-Sprachen kompatibel und kompatibel sein sollte.

+4

Ein gutes Beispiel aus dem BCL: Förderung von String zu XName. Daraus ergibt sich nur Gutes. –

+0

XName ist schön. Ein wenig seltsam, um herauszufinden, wie man mit XNamespace baut, aber sobald man das Muster bekommt, ist es sooo süß. – dthorpe

Verwandte Themen