Bạn có thể khai báo toán tử chuyển đổi trên lớp của mình bằng cách sử dụng từ khóa explicit
hoặc implicit
.
Theo nguyên tắc chung, bạn chỉ nên cung cấp implicit
toán tử chuyển đổi khi chuyển đổi không thể không thành công. Sử dụng explicit
toán tử chuyển đổi khi chuyển đổi có thể không thành công.
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;
}
}
Việc sử dụng explicit
có nghĩa là người dùng trong lớp của bạn sẽ cần thực hiện chuyển đổi rõ ràng:
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;
Sử dụng implicit
có nghĩa là người dùng trong lớp của bạn không cần thực hiện chuyển đổi rõ ràng, tất cả đều diễn ra minh bạch:
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;