C# Dynamic關(guān)鍵字之:解析dynamic就是Object
從最簡(jiǎn)單的示例開(kāi)始:
static void Main(string[] args)
{
dynamic dyn = 1;
object obj = 1;
//在編譯時(shí)將鼠標(biāo)放到 ”dyn” 和”obj”中可以發(fā)現(xiàn):
// dyn:局部變量 dynamic (dyn)
// obj: 局部變量object (obj)
System.Console.WriteLine(dyn.GetType());
System.Console.WriteLine(obj.GetType());
}
運(yùn)行這段代碼將顯示 dyn 和obj 的運(yùn)行時(shí)類(lèi)型:
System.Int32
System.Int32
在WriteLine方法后面增加兩行:
dyn = dyn + 3;
obj = obj + 3;
編譯:
可以看到對(duì)于表達(dá)式 obj +3 ,編譯器器報(bào)告了錯(cuò)誤,但是不會(huì)報(bào) dyn+3 編譯。
編譯器不會(huì)檢查包含dyn的表達(dá)式,原因在于 dyn 是 dynamic。
類(lèi)型轉(zhuǎn)換
修改Main代碼如下:
dynamic dyn = (dynamic)1;
int j = (int)dyn;
可以看到1被強(qiáng)制轉(zhuǎn)換成dynamic,然后又被強(qiáng)制轉(zhuǎn)換回int.
然而dynamic可以隱式的轉(zhuǎn)換成任何類(lèi)型,并且也可以從其他類(lèi)型中轉(zhuǎn)換回來(lái),
所以上面的代碼和下面的等價(jià):
dynamic dyn = 1;
int j = dyn;
修改Main代碼增加如下代碼:
//下面這句話(huà)會(huì)無(wú)法通過(guò)編譯,typeof 運(yùn)算符無(wú)法用在動(dòng)態(tài)類(lèi)型上
//Console.WriteLine(typeof(dynamic));
Console.WriteLine(typeof(List<dynamic>));
如果你是typeof(dynamic)會(huì)報(bào)typeof運(yùn)算符無(wú)法用在動(dòng)態(tài)類(lèi)型上的錯(cuò)誤,
但是如果你寫(xiě)的是List<dynamic> 那么輸出結(jié)果如下:
可以看到輸出時(shí)System.Object。
微軟對(duì)此的解釋是:
在大多數(shù)情況下, dynamic 類(lèi)型與 object 類(lèi)型的行為是一樣的。 但是,不會(huì)用編譯器對(duì)包含 dynamic 類(lèi)型表達(dá)式的操作進(jìn)行解析或類(lèi)型檢查。 編譯器將有關(guān)該操作信息打包在一起,并且該信息以后用于計(jì)算運(yùn)行時(shí)操作。在此過(guò)程中,類(lèi)型 dynamic 的變量會(huì)編譯到類(lèi)型 object 的變量中。 因此,類(lèi)型 dynamic 只在編譯時(shí)存在,在運(yùn)行時(shí)則不存在。
相關(guān)文章
c#文件助手類(lèi)分享(讀取文件內(nèi)容 操作日志文件)
這篇文章主要介紹了c#文件助手類(lèi),實(shí)現(xiàn)的功能包括日志文件操作、獲取路徑中的文件名稱(chēng)、讀取文件內(nèi)容等功能,大家參考使用吧2014-01-01
C#中winform控制textbox輸入只能為數(shù)字的方法
這篇文章主要介紹了C#中winform控制textbox輸入只能為數(shù)字的方法,包括使用keyPress事件限制鍵盤(pán)輸入以及TextChanged事件限制粘貼等情況,來(lái)實(shí)現(xiàn)控制輸入為數(shù)字的功能,需要的朋友可以參考下2015-01-01
使用C#解決Excel自動(dòng)適應(yīng)列寬的問(wèn)題
這篇文章主要介紹了如何使用C#解決Excel自動(dòng)適應(yīng)列寬的問(wèn)題,通過(guò) COM 操作 Excel 自動(dòng)適應(yīng)列寬的方法是 AutoFit 方法,該方法適于自動(dòng)適應(yīng)列寬或行高,文中通過(guò)代碼示例和圖文講解的非常詳細(xì),需要的朋友可以參考下2024-06-06
C#中WebBrowser.DocumentCompleted事件多次調(diào)用問(wèn)題解決方法
這篇文章主要介紹了C#中WebBrowser.DocumentCompleted事件多次調(diào)用問(wèn)題解決方法,本文講解了3種情況和各自情況的解決方法,需要的朋友可以參考下2015-01-01
Unity的IPreprocessBuild實(shí)用案例深入解析
這篇文章主要為大家介紹了Unity的IPreprocessBuild實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
C#中datagridview使用tooltip控件顯示單元格內(nèi)容的方法
這篇文章主要介紹了C#中datagridview使用tooltip控件顯示單元格內(nèi)容的方法,實(shí)例分析了C#控件的相關(guān)使用技巧,需要的朋友可以參考下2016-06-06
在winform下實(shí)現(xiàn)左右布局多窗口界面的方法之續(xù)篇
這篇文章主要介紹了在winform下實(shí)現(xiàn)左右布局多窗口界面的方法之續(xù)篇 的相關(guān)資料,需要的朋友可以參考下2016-02-02

