Vous pouvez déclarer des opérateurs de conversion sur votre classe à l'aide des mots clés explicit
ou implicit
.
En règle générale, vous ne devez fournir implicit
des opérateurs de conversion que lorsque la conversion ne peut pas échouer. Utilisez explicit
des opérateurs de conversion lorsque la conversion peut échouer.
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;
}
}
Utiliser explicit
signifie que les utilisateurs de votre classe devront effectuer une conversion explicite:
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;
L'utilisation implicit
signifie que les utilisateurs de votre classe n'ont pas besoin d'effectuer une conversion explicite, tout se passe de manière 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;
Pour la prise en charge personnalisée de la distribution, vous devez fournir des opérateurs de conversion (explicites ou implicites). L'exemple suivant de classe EncodedString est une implémentation simpliste de chaîne avec un encodage personnalisé (peut être utile si vous devez traiter des chaînes énormes et rencontrer des problèmes de consommation de mémoire car les chaînes .Net sont Unicode - chaque caractère prend 2 octets de mémoire - et EncodedString peut prendre 1 octet par caractère).
EncodedString peut être converti en byte [] et en System.String. Les commentaires dans le code éclairent et expliquent également un exemple où la conversion implicite peut être dangereuse.
Habituellement, vous avez besoin d'une très bonne raison pour déclarer les opérateurs de conversion en premier lieu car.
Des lectures complémentaires sont disponibles sur MSDN .
la source