Verwenden von Konvertierungsoperatoren (C#-Programmierhandbuch)
Sie können die einfacheren implicit-Konvertierungsoperatoren verwenden oder die explicit-Konvertierungsoperatoren, die eindeutig signalisieren, dass ein Typ konvertiert wird. In diesem Thema werden beide Typen von Konvertierungsoperatoren veranschaulicht.
Hinweis
Weitere Informationen über einfache Typkonvertierungen finden Sie unter Gewusst wie: Konvertieren einer Zeichenfolge in eine Zahl (C#-Programmierhandbuch), Gewusst wie: Konvertieren eines Bytearrays in einen ganzzahligen Typ (C#-Programmierhandbuch), Gewusst wie: Konvertieren zwischen Hexadezimalzeichenfolgen und numerischen Typen (C#-Programmierhandbuch) oder Convert.
Beispiel
Dies ist ein Beispiel eines expliziten Konvertierungsoperators. Dieser Operator konvertiert den Typ Byte in den Wertetyp Digit. Da nicht alle Bytes in eine Ziffer konvertiert werden können, ist die Konvertierung explizit. Das bedeutet, dass eine Umwandlung verwendet werden muss, wie in der Main-Methode dargestellt wird.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static explicit operator Digit(byte b) // explicit byte to digit conversion operator
{
Digit d = new Digit(b); // explicit conversion
System.Console.WriteLine("Conversion occurred.");
return d;
}
}
class TestExplicitConversion
{
static void Main()
{
try
{
byte b = 3;
Digit d = (Digit)b; // explicit conversion
}
catch (System.Exception e)
{
System.Console.WriteLine("{0} Exception caught.", e);
}
}
}
// Output: Conversion occurred.
In diesem Beispiel wird ein impliziter Konvertierungsoperator dargestellt. Es wird ein Konvertierungsoperator definiert, der das Ergebnis des vorherigen Beispiels rückgängig macht: Er konvertiert die Wertklasse Digit in den ganzzahligen Typ Byte. Da sich alle Ziffern in ein Byte konvertieren lassen, besteht kein Anlass, die explizite Konvertierung zu erzwingen.
struct Digit
{
byte value;
public Digit(byte value) //constructor
{
if (value > 9)
{
throw new System.ArgumentException();
}
this.value = value;
}
public static implicit operator byte(Digit d) // implicit digit to byte conversion operator
{
System.Console.WriteLine("conversion occurred");
return d.value; // implicit conversion
}
}
class TestImplicitConversion
{
static void Main()
{
Digit d = new Digit(3);
byte b = d; // implicit conversion -- no cast needed
}
}
// Output: Conversion occurred.
Siehe auch
Referenz
Konvertierungsoperatoren (C#-Programmierhandbuch)