Sie können Konvertierungsoperatoren für Ihre Klasse entweder mit explicit
oder deklarierenimplicit
Schlüsselwörtern .
Als allgemeine Faustregel sollten Sie implicit
Konvertierungsoperatoren nur angeben , wenn die Konvertierung möglicherweise nicht fehlschlagen kann. Verwenden Sie explicit
Konvertierungsoperatoren, wenn die Konvertierung möglicherweise fehlschlägt.
public class MyClass
{
private byte[] _bytes;
// change explicit to implicit depending on what you need
public static explicit operator MyClass(byte[] b)
{
MyClass m = new MyClass();
m._bytes = b;
return m;
}
// change explicit to implicit depending on what you need
public static explicit operator byte[](MyClass m)
{
return m._bytes;
}
}
Verwenden explicit
bedeutet, dass Benutzer Ihrer Klasse eine explizite Konvertierung durchführen müssen:
byte[] foo = new byte[] { 1, 2, 3, 4, 5 };
// explicitly convert foo into an instance of MyClass...
MyClass bar = (MyClass)foo;
// explicitly convert bar into a new byte[] array...
byte[] baz = (byte[])bar;
Verwenden implicit
bedeutet, dass Benutzer Ihrer Klasse keine explizite Konvertierung durchführen müssen. Dies geschieht alles transparent:
byte[] foo = new byte[] { 1, 2, 3, 4, 5 };
// imlpicitly convert foo into an instance of MyClass...
MyClass bar = foo;
// implicitly convert bar into a new byte[] array...
byte[] baz = bar;
Für die Unterstützung von benutzerdefinierten Besetzungen müssen Sie Besetzungsoperatoren (explizit oder implizit) bereitstellen. Das folgende Beispiel für die EncodedString-Klasse ist eine vereinfachte Implementierung von Zeichenfolgen mit benutzerdefinierter Codierung (kann nützlich sein, wenn Sie sehr große Zeichenfolgen verarbeiten und Probleme mit dem Speicherverbrauch haben müssen, da .Net-Zeichenfolgen Unicode sind - jedes Zeichen benötigt 2 Byte Speicher - und EncodedString kann 1 Byte pro Zeichen benötigen.
EncodedString kann in Byte [] und in System.String konvertiert werden. Kommentare im Code geben Aufschluss über ein Beispiel, in dem implizite Konvertierungen gefährlich sein können.
Normalerweise brauchen Sie einen sehr guten Grund, um überhaupt Konvertierungsoperatoren zu deklarieren, weil.
Weitere Informationen finden Sie auf MSDN .
quelle