Puede declarar operadores de conversión en su clase utilizando las palabras clave explicit
o implicit
.
Como regla general, solo debe proporcionar implicit
operadores de conversión cuando la conversión no pueda fallar. Utilice explicit
operadores de conversión cuando la conversión pueda fallar.
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;
}
}
Usar explicit
significa que los usuarios de su clase necesitarán realizar una conversión explícita:
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;
Usar implicit
significa que los usuarios de su clase no necesitan realizar una conversión explícita, todo sucede de manera transparente:
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;
Para el soporte de transmisión personalizado, debe proporcionar operadores de transmisión (explícitos o implícitos). El siguiente ejemplo de la clase EncodedString es una implementación simplista de cadena con codificación personalizada (puede ser útil si tiene que procesar cadenas enormes y tener problemas de consumo de memoria porque las cadenas .Net son Unicode, cada carácter ocupa 2 bytes de memoria) y EncodedString puede tomar 1 byte por carácter).
EncodedString se puede convertir a byte [] y System.String. Los comentarios en el código arrojan algo de luz y también explican un ejemplo en el que la conversión implícita puede ser peligrosa.
Por lo general, necesita una muy buena razón para declarar operadores de conversión en primer lugar porque.
Hay más lectura disponible en MSDN .
fuente