Explizite Konvertierung

Aktualisiert: November 2007

Explizite Konvertierung ist eine sprachspezifische Art der Konvertierung. Einige Compiler erfordern explizite Konvertierung zur Unterstützung von einschränkenden Konvertierungen.

Zwar unterstützen die meisten Sprachen, die die Common Language Runtime als Ziel haben, explizite Konvertierung, doch ist der zugehörige Algorithmus von Sprache zu Sprache verschieden. In einigen dieser Sprachen ist es u. U. erforderlich, eine bestimmte Konvertierung explizit durchzuführen, andere hingegen gestatten die implizite Durchführung derselben Konvertierung. In ähnlicher Weise können einige Sprachen unter bestimmten Bedingungen die explizite Ausführung einer bestimmten Konvertierung erfordern (vergleichbar mit der Situation, dass Option Strict in Visual Basic auf "on" festgelegt ist), während die Konvertierung unter anderen Bedingungen implizit durchgeführt wird (vergleichbar mit der Situation, dass Option Strict in Visual Basic auf "off" festgelegt ist). Weitere Informationen zu expliziten Konvertierungen finden Sie in der Dokumentation der von Ihnen verwendeten Sprache.

In einigen Sprachen, wie etwa C# und C++, wird Typumwandlung zur Durchführung expliziter Konvertierungen verwendet. Typumwandlung bedeutet, dass einer Konvertierung ein Datentyp vorangestellt wird, durch den die Art der durchzuführenden Konvertierung festlegt wird. In anderen Sprachen, wie Visual Basic, wird explizite Konvertierung durch Aufrufen einer Konvertierungsfunktion ausgeführt. In Visual Basic wird die CType-Funktion oder eine der spezifischen Typkonvertierungsfunktionen, wie etwa CStr oder CInt, verwendet, um explizite Konvertierungen von Datentypen zu ermöglichen, die implizit nicht erlaubt sind.

Die meisten Compiler ermöglichen die überprüfte und nicht überprüfte Ausführung expliziter Konvertierungen. Bei nicht überprüften Konvertierungen wird eine OverflowException ausgelöst, wenn der Wert des konvertierten Typs außerhalb des Bereichs des Zieltyps liegt. Wird unter denselben Umständen eine nicht überprüfte Konvertierung durchgeführt, wird möglicherweise keine Ausnahme ausgelöst. Die genauen Auswirkungen lassen sich jedoch nicht vorhersagen. Dies kann zu einem fehlerhaften Wert führen.

Hinweis:

In C# können überprüfte Konvertierungen mithilfe des Schlüsselworts checked zusammen mit dem Umwandlungsoperator oder durch Festlegen der Compileroption /checked+ ausgeführt werden. Umgekehrt können nicht überprüfte Konvertierungen mithilfe des Schlüsselworts unchecked zusammen mit dem Umwandlungsoperator oder durch Festlegen der Compileroption /checked- ausgeführt werden. In der Standardeinstellung werden explizite Konvertierungen nicht überprüft. In Visual Basic können überprüfte Konvertierungen durch Deaktivieren des Kontrollkästchens Überprüfungen auf Ganzzahlüberlauf entfernen im Dialogfeld Erweiterte Compilereinstellungen des Projekts oder durch Festlegen der Compileroption /removeintchecks- ausgeführt werden. Umgekehrt können nicht überprüfte Konvertierungen durch Aktivieren des Kontrollkästchens Überprüfungen auf Ganzzahlüberlauf entfernen im Dialogfeld Erweiterte Compilereinstellungen des Projekts oder durch Festlegen der Compileroption /removeintchecks+ ausgeführt werden. In der Standardeinstellung werden explizite Konvertierungen überprüft.

Im folgenden Beispiel, in dem versucht wird Int32.MaxValue in einen Byte-Wert zu konvertieren, wird eine nicht überprüfte C#-Umwandlung dargestellt. Beachten Sie, dass bei der Konvertierung keine OverflowException ausgelöst wird, obwohl der ganzzahlige Wert außerhalb des Bereichs des Zieldatentyps Byte liegt.

// The integer value is set to 2147483647.
int myInt = int.MaxValue;
try
{
   byte myByte = (byte)myInt;
   Console.WriteLine("The byte value is {0}.", myByte);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert {0} to a byte.", myInt);
}   
// The value of MyByte is 255, the maximum value of a Byte.
// No overflow exception is thrown.

Im folgenden Beispiel wird die explizite Konvertierung mithilfe der überprüften CByte-Funktion in Visual Basic sowie die überprüfte Typumwandlung in C# mithilfe des Schlüsselworts checked veranschaulicht. In diesem Beispiel wird versucht, Int32.MaxValue in einen Byte-Wert zu konvertieren. Da sich Int32.MaxValue jedoch außerhalb des Bereichs des Byte-Datentyps befindet, wird eine OverflowException ausgelöst.

' The integer value is set to 2147483647.
Dim myInt As Integer = Integer.MaxValue
Try
   Dim myByte As Byte = CByte(myInt)
   Console.WriteLine("The byte value is {0}.", myByte)
Catch e As OverflowException
   Console.WriteLine("Unable to convert {0} to a byte.", myInt)
End Try   
' Attempting to convert Int32.MaxValue to a Byte 
' throws an OverflowException.
// The integer value is set to 2147483647.
int myInt = int.MaxValue;
try
{
   byte myByte = checked ((byte) myInt);
   Console.WriteLine("The byte value is {0}.", myByte);
}
catch (OverflowException)
{
   Console.WriteLine("Unable to convert {0} to a byte.", myInt);
}   
// Attempting to convert Int32.MaxValue to a Byte 
// throws an OverflowException.

Beachten Sie, dass eine explizite Konvertierung in verschiedenen Sprachen zu unterschiedlichen Ergebnissen führen kann, und dass sich diese Ergebnisse vom Verhalten der entsprechenden Convert-Methode unterscheiden können. Nähere Informationen zu expliziten Konvertierungen erhalten Sie in der Dokumentation zu der von Ihnen verwendeten Sprache. In Visual Basic wird z. B. beim Konvertieren eines Double-Werts in einen Int32-Wert unter Verwendung der CInt-Funktion das Ergebnis gerundet. In C# entfallen bei derselben, explizit durchgeführten Konvertierung die Stellen hinter dem Komma. Im folgenden Beispielcode wird explizite Konvertierung verwendet, um einen Double-Wert in einen Integer-Wert zu konvertieren.

Dim myDouble As Double = 42.72
Dim myInt As Integer = CInt(myDouble)
Console.WriteLine(myInt)
' myInt has a value of 43.
Double myDouble = 42.72;
int myInt = checked ((int)myDouble);
Console.WriteLine(myInt);
// myInt has a value of 42.

Siehe auch

Referenz

System.Convert

Weitere Ressourcen

Konvertieren von Typen