Konvertierungsoperatoren
Aktualisiert: November 2007
Konvertierungsoperatoren konvertieren ein Objekt von einem Typ in einen anderen Typ. Konvertierungsoperatoren können implizit oder explizit sein. Für implizite Konvertierungsoperatoren muss im Quellcode keine Typumwandlung angegeben werden, damit die Konvertierung ausgeführt wird. Explizite Konvertierungsoperatoren erfordern für die Ausführung der Konvertierung eine Typumwandlung im Quellcode.
Die folgende Signatur enthält den expliziten Konvertierungsoperator der Point-Klasse zum Konvertieren zwischen Point undSize.
[Visual Basic]
Public Shared Function op_Explicit( _
ByVal p As Point _
) As Size
[C#]
public static Size op_Explicit(
Point p
);
Stellen Sie keinen Konvertierungsoperator bereit, wenn die entsprechende Konvertierung nicht eindeutig von den Endbenutzern erwartet wird.
Im Idealfall sind Daten aus Untersuchungen zu den Kundenanforderungen vorhanden, die das Definieren eines Konvertierungsoperators unterstützen. Als Alternative kann das Definieren des Operators durch Beispiele unterstützt werden, in denen einer oder mehrere ähnliche Typen die entsprechende Konvertierung erfordern.
Definieren Sie keine Konvertierungsoperatoren außerhalb der Domäne eines Typs.
Beispielsweise sind Int32, Double und Decimal numerische Typen, während DateTime kein numerischer Typ ist. Das Konvertieren eines Double-Typs in einen DateTime-Typ sollte nicht als Konvertierungsoperator implementiert werden. Verwenden Sie einen Konstruktor, um einen Typ in einen anderen Typ zu konvertieren, der sich nicht in der gleichen Domäne befindet.
Stellen Sie keinen impliziten Konvertierungsoperator bereit, wenn bei der Konvertierung Datenverlust auftreten kann.
Beispielsweise sollte Double nicht implizit in Single konvertiert werden, weil Double eine höhere Genauigkeit als Single aufweist. Für Konvertierungen mit Datenverlust kann ein expliziter Konvertierungsoperator bereitgestellt werden.
Lösen Sie keine Ausnahmen aus impliziten Umwandlungen aus.
Implizite Umwandlungen werden vom System aufgerufen. Der Benutzer weiß möglicherweise nicht, dass eine Konvertierung erfolgt und kann den Code nicht problemlos debuggen.
Lösen Sie System.InvalidCastException aus, wenn ein Aufruf eines Umwandlungsoperators zu einer Konvertierung mit Datenverlust führt und der Vertrag des Operators Konvertierungen mit Datenverlust nicht zulässt.
Copyright für einzelne Teile 2005 Microsoft Corporation. Alle Rechte vorbehalten.
Copyright für einzelne Teile Addison-Wesley Corporation. Alle Rechte vorbehalten.
Weitere Informationen zu Entwurfsrichtlinien finden Sie im Buch "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries" von Krzysztof Cwalina und Brad Abrams, veröffentlicht von Addison-Wesley, 2005.