隱含的操作有什麼錯誤使用隱式操作如下所示:泛型類型
//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;
}
}
我想我可以當作這樣的對象作爲一個值類型的實例,但看到我從來沒有見過這樣的例子我想也許有一個原因而不是做這樣的事情,有人可以指出?
在我的實際代碼中,我正在考慮將其作爲數據抽象層的一部分,以便我可以用描述底層數據的信息返回對象,但允許邏輯代碼將它視爲值類型需要知道的是價值,同時保持一切都很好,並與泛型保持一致。
我不知道我理解周圍可空類型的關注......在我看來,如果你有N =新MyClass的(){值= NULL};消費代碼試圖做類似int i = n;並且它會拋出相同的異常,以至於任何不良的轉換會發生,對於可空類型來說沒什麼特別的。 –
asawyer
2010-09-29 15:58:12
@asawyer:這只是一個例子。想象一下,沒有'T'和*你*必須實現你自己的'Nullable'。你會給它一個隱式轉換爲'T'嗎?我的回答解釋了爲什麼你不應該這樣做,爲什麼* real *'T?'沒有。 –
Timwi
2010-09-29 16:02:43
我現在看到,首先是這些問題引發了這個問題。看起來我可以繼續前進,但要非常謹慎。 – asawyer 2010-09-29 16:12:21