2012-05-09 56 views
6

的「協方差」當我們有兩個結構,一個可以隱式轉換到另一個時,那麼看起來兩個版本System.Nullable<>也可以隱式轉換。類似地,如果結構A具有隱式轉換爲結構B,那麼A?也轉換爲B?System.Nullable <> struct

下面是一個例子:

struct MyNumber 
{ 
    public readonly int Inner; 

    public MyNumber(int i) 
    { 
    Inner = i; 
    } 

    public static implicit operator int(MyNumber n) 
    { 
    return n.Inner; 
    } 
} 

裏面的一些方法:

MyNumber? nmn = new MyNumber(42); 
int? covariantMagic = nmn; // works! 

在C#語言規範版本4.0我們看到這樣的轉換應「的預定義的隱式標識存在和數值轉換「。

但是是否安全地假設它也可以用於用戶定義的隱式轉換?

(這個問題可能與此錯誤:http://connect.microsoft.com/VisualStudio/feedback/details/642227/

回答

6

但它是安全的假設,它也將用戶定義的隱式轉換工作?

是的。從C#4規範的6.4.2節:

給定一個用戶定義的轉換運算符從一個非空值類型S convers到非空值類型T,一個提升轉換運算符存在從S?轉換爲T?。此提升轉換操作者進行解纏從S?S隨後從ST用戶定義的轉換,接着進行包裹從TT?,不同之處在於一個空值S?直接轉換到一個空值T?

提升的轉換運算符與其基礎用戶定義的轉換運算符具有相同的隱式或顯式分類。術語「用戶定義的轉換」適用於使用用戶定義的和提升的轉換運算符。

+4

你有沒有時間看這些報價,或者你只是手工打字? – Blindy

+0

@Bindind:都!我在我的辦公桌上有規格的硬拷貝,我通過輸入...複製了本節,因此任何錯別字! –

+0

嗯,我錯過了第6.4.2節,只讀過6.1.4。謝謝。 –

相關問題