Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein benutzerdefinierter Typ kann eine benutzerdefinierte implizite oder explizite Konvertierung von oder zu einem anderen Typ definieren, vorausgesetzt, eine Standardkonvertierung ist nicht zwischen denselben beiden Typen vorhanden. Implizite Konvertierungen erfordern keine spezielle Syntax, die aufgerufen werden muss und in verschiedenen Situationen auftreten kann, z. B. in Zuordnungen und Methodenaufrufen. Vordefinierte implizite C#-Konvertierungen sind immer erfolgreich und lösen niemals eine Ausnahme aus. Benutzerdefinierte implizite Konvertierungen sollten sich auch auf diese Weise verhalten. Wenn eine benutzerdefinierte Konvertierung eine Ausnahme auslösen oder Informationen verlieren kann, definieren Sie sie als explizite Konvertierung.
Dies ist und da Operatoren keine benutzerdefinierten Konvertierungen in Betracht ziehen. Verwenden Sie einen Umwandlungsausdruck , um eine benutzerdefinierte explizite Konvertierung aufzurufen.
Verwenden Sie die operator Bzw implicitexplicit. Schlüsselwörter, um eine implizite oder explizite Konvertierung bzw. explizite Konvertierung zu definieren. Der Typ, der eine Konvertierung definiert, muss entweder ein Quelltyp oder ein Zieltyp dieser Konvertierung sein. Eine Konvertierung zwischen zwei benutzerdefinierten Typen kann in einem der beiden Typen definiert werden.
Im folgenden Beispiel wird veranschaulicht, wie eine implizite und explizite Konvertierung definiert wird:
using System;
public readonly struct Digit
{
private readonly byte digit;
public Digit(byte digit)
{
if (digit > 9)
{
throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
}
this.digit = digit;
}
public static implicit operator byte(Digit d) => d.digit;
public static explicit operator Digit(byte b) => new Digit(b);
public override string ToString() => $"{digit}";
}
public static class UserDefinedConversions
{
public static void Main()
{
var d = new Digit(7);
byte number = d;
Console.WriteLine(number); // output: 7
Digit digit = (Digit)number;
Console.WriteLine(digit); // output: 7
}
}
Sie können überprüfte explizite Konvertierungsoperatoren definieren. Weitere Informationen finden Sie im Abschnitt Benutzerdefinierte Überprüfte Operatoren des Artikels Arithmetische Operatoren.
Sie verwenden auch das operator Schlüsselwort, um einen vordefinierten C#-Operator zu überladen. Weitere Informationen finden Sie unter Operatorüberladung.
C#-Sprachspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:
- Konvertierungsoperatoren
- Benutzerdefinierte Konvertierungen
- Implizite Konvertierungen
- Explizite Konvertierungen