Có gì không ổn với việc sử dụng một nhà điều hành ngầm như sau:điều hành ngầm trên các loại generic
//linqpad c# program example
void Main()
{
var testObject = new MyClass<int>() { Value = 1 };
var add = 10 + testObject; //implicit conversion to int here
add.Dump(); // 11
}
class MyClass<T>
{
public T Value { get; set; }
public static implicit operator T (MyClass<T> myClassToConvert)
{
return myClassToConvert.Value;
}
}
Tôi đã suy nghĩ tôi có thể điều trị như thể hiện của đối tượng như một loại giá trị theo cách này, nhưng nhìn thấy như tôi đã không bao giờ nhìn thấy một ví dụ về điều này tôi nghĩ có lẽ có một lý do không để làm một cái gì đó như thế này mà ai đó có thể chỉ ra? Trong mã thực tế của tôi, tôi đã nghĩ đến việc làm điều này như là một phần của lớp trừu tượng dữ liệu, để tôi có thể trả về các đối tượng với thông tin mô tả dữ liệu cơ bản, nhưng cho phép mã logic coi nó là một kiểu giá trị. cần phải biết là giá trị, và đồng thời giữ cho nó tốt đẹp và an toàn với các loại thuốc generic.
Tôi không chắc rằng tôi hiểu mối quan tâm xung quanh các loại nullable ... Dường như với tôi rằng nếu bạn có n = new MyClass() {Value = null}; và mã tiêu thụ đã cố gắng làm một cái gì đó như int i = n; và nó sẽ ném cùng một ngoại lệ mà bất kỳ diễn viên xấu nào, không có gì đặc biệt về loại nullable ở đây phải không? –
asawyer
@asawyer: Đó chỉ là một ví dụ. Hãy tưởng tượng rằng không có 'T?' Và * bạn * đã phải thực hiện một 'Nullable' của riêng bạn. Bạn có chuyển nó thành 'T' không? Câu trả lời của tôi giải thích lý do tại sao bạn không nên, và tại sao * real * 'T?' Thì không. –
Timwi
Tôi thấy bây giờ, đó là những loại mối quan tâm đã nhắc câu hỏi ở nơi đầu tiên. Có vẻ như tôi nên được chấp thuận, nhưng rất thận trọng. – asawyer