Możesz zadeklarować operatory konwersji w swojej klasie, używając słów kluczowych explicit
lub implicit
.
Zgodnie z ogólną zasadą implicit
operatory konwersji należy podawać tylko wtedy, gdy konwersja nie może się nie powieść. Użyj explicit
operatorów konwersji, gdy konwersja może się nie powieść.
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;
}
}
Użycie explicit
oznacza, że użytkownicy Twojej klasy będą musieli dokonać jawnej konwersji:
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;
Używanie implicit
oznacza, że użytkownicy Twojej klasy nie muszą dokonywać jawnej konwersji, wszystko dzieje się w sposób przejrzysty:
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;
Aby obsługiwać niestandardowe rzutowanie, musisz podać operatory rzutowania (jawne lub niejawne). Poniższy przykład klasy EncodedString jest uproszczoną implementacją ciągu znaków z niestandardowym kodowaniem (może być przydatny, jeśli musisz przetwarzać ogromne, ogromne ciągi i napotkasz problemy z zużyciem pamięci, ponieważ łańcuchy sieciowe są Unicode - każdy znak zajmuje 2 bajty pamięci - i EncodedString może zająć 1 bajt na znak).
EncodedString można przekonwertować na bajt [] i na System.String. Komentarze w kodzie rzucają trochę światła, a także wyjaśniają przykład, kiedy niejawna konwersja może być niebezpieczna.
Zwykle potrzebujesz bardzo dobrego powodu, aby zadeklarować jakiekolwiek operatory konwersji w pierwszej kolejności, ponieważ.
Więcej informacji można znaleźć w witrynie MSDN .
źródło