Tạo một chuyển đổi rõ ràng hoặc ngầm:
public class Foo
{
public static explicit operator int(Foo instance)
{
return 0;
}
public static implicit operator double(Foo instance)
{
return 0;
}
}
Sự khác biệt là, với các chuyển đổi rõ ràng bạn sẽ phải làm loại đúc cho mình:
int i = (int) new Foo();
và với chuyển đổi tiềm ẩn, bạn chỉ có thể "chỉ định" mọi thứ:
double d = new Foo();
MSDN có điều này để nói:
"Bằng cách loại bỏ các phôi không cần thiết, chuyển đổi tiềm ẩn có thể cải thiện khả năng đọc mã nguồn. Tuy nhiên, do các chuyển đổi ngầm không yêu cầu các lập trình viên phải truyền một cách rõ ràng từ loại này sang loại khác, cần phải cẩn thận để ngăn chặn các kết quả không mong muốn. Nói chung, các nhà khai thác chuyển đổi tiềm ẩn không bao giờ nên ném ngoại lệ và không bao giờ mất thông tin để chúng có thể được sử dụng một cách an toàn mà không có sự nhận thức của người lập trình. Nếu một nhà điều hành chuyển đổi không thể đáp ứng các tiêu chí đó, nó phải được đánh dấu rõ ràng. "(tôi nhấn mạnh)
Bạn mong đợi điều đó sẽ làm gì? I.o.w, Foo trông như thế nào? –