2015-07-28 71 views
0

考慮下面的代碼:拆箱動態類型

public class Foo1 
{ 
    public dynamic dowork() 
    { 
     return 10; 
    }   
} 
Main

而且,我叫這樣的:

int i = new Foo1().dowork(); 

返回值是10,我的問題是,爲什麼在這裏不需要Unboxing ?但在watch我已驗證Return TypedoworkSystem.Object

回答

2

取消裝箱 - 但它是隱含的。有從任何dynamic表達式到任何類型的隱式轉換。執行的確切轉換將取決於值的執行時間類型。

從C#5規範的6.1.8節:

隱式動態轉換從dynamic類型的任何類型的T表達式存在。轉換是動態綁定的(第7.2.2節),這意味着隱式轉換將在運行時從表達式的運行時類型到T。如果找不到轉換,則會引發運行時異常。

(有這裏有一個輕微的細微差別,它是從dynamic類型的任何表達而不是從dynamic類型本身促成的轉換,這避免了一些轉換環,其在別的地方導致規範的問題。)