Você pode declarar operadores de conversão em sua classe usando as palavras-chave explicit
ou implicit
.
Como regra geral, você só deve fornecer implicit
operadores de conversão quando a conversão não puder falhar. Use explicit
operadores de conversão quando a conversão pode falhar.
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 os usuários de sua classe precisarão fazer uma conversão 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 os usuários de sua classe não precisam realizar uma conversão explícita, tudo acontece de forma 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 suporte de conversão customizada, você precisa fornecer operadores de conversão (explícitos ou implícitos). O exemplo a seguir da classe EncodedString é uma implementação simplista de string com codificação personalizada (pode ser útil se você tiver que processar strings enormes e enfrentar problemas de consumo de memória porque as strings .Net são Unicode - cada caractere ocupa 2 bytes de memória - e EncodedString pode levar 1 byte por caractere).
EncodedString pode ser convertido em byte [] e em System.String. Comentários no código lançam alguma luz e também explicam um exemplo de quando a conversão implícita pode ser perigosa.
Normalmente, você precisa de um bom motivo para declarar quaisquer operadores de conversão em primeiro lugar, porque.
Leituras adicionais estão disponíveis no MSDN .
fonte