国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

Dynamic和Var的區(qū)別及dynamic使用詳解

2019-10-29 21:33:55
字體:
供稿:網(wǎng)友
C#中的很多關(guān)鍵詞用法比較容易混淆,var和dynamic就是其中一組,他們都可以申明動態(tài)類型的變量,但是本質(zhì)上他們還是有不少區(qū)別的,下面通過本文給大家介紹Dynamic和Var的區(qū)別及如何正確使用dynamic,需要的朋友參考下
 

C#中的很多關(guān)鍵詞用法比較容易混淆,var和dynamic就是其中一組,他們都可以申明動態(tài)類型的變量,但是本質(zhì)上他們還是有不少區(qū)別的。var 在編譯階段已經(jīng)確定類型,在初始化時候,必須提供初始化的值,而dynamic則可以不提供,它是在運(yùn)行時才確定類型。

1.var聲明一個局部變量只是一種簡化語法,它要求編譯器根據(jù)一個表達(dá)式推斷具體的數(shù)據(jù)類型。

2.var只能用于聲明方法內(nèi)部的局部變量,而dynamic可用于局部變量,字段,參數(shù)。

3.表達(dá)式不能轉(zhuǎn)型為var,但能轉(zhuǎn)型為dynamic。

4.必須顯式初始化用var聲明的變量,但無需初始化用dynam聲明的變量。

//var 在編譯階段已經(jīng)確定類型// var varError;var isIntType = ;isIntType.ToString();//dynamic在編譯期間不進(jìn)行任何//的類型檢查,而是將類型檢查放到//了運(yùn)行期dynamic dyn = ;// dynamic dynOk;dyn = "hello world";//error 字符串沒有 [ fn不存在的方法 ] 的方法//但在語法檢查時通過,不會提示語法錯誤var s = dyn.fn不存在的方法();//runtime error 

由于dynamic在運(yùn)行時才檢查類型,所以有時候會出現(xiàn)錯誤,因此使用它必須得法,那么何時使用它比較方便呢?我們先定義一個Person類,然后用反射進(jìn)行動態(tài)調(diào)用起Talk方法:

class Person{public void Talk(string msg){MessageBox.Show(msg);}} 
//dynamic 在反射時候可以簡化代碼System.Type t = typeof(Person);var obj = Activator.CreateInstance(t, null);t.InvokeMember("Talk", System.Reflection.BindingFlags.InvokeMethod, null, obj, new object[] { "hell world!" }); 

  在反射的時候,傳統(tǒng)的方法的方法調(diào)用往往比較繁瑣,而用dyanmic則非常簡化,而且直觀:

dynamic obj = Activator.CreateInstance(t, null);obj.Talk("hell world!");

  因此,dynamic只要使用得法,還是一個C#一個非常好的特征。

最后給大家總結(jié)以下:

常有人會拿var這個關(guān)鍵字來和dynamic做比較。實(shí)際上,var和dynamic完全是兩個概念,根本不應(yīng)該放在一起做 比較。var實(shí)際上是編譯期拋給我們的“語法糖”,一旦被編譯,編譯期會自動匹配var 變量的實(shí)際類型,并用實(shí)際類型來替換該變量的申明,這看上去就好像我們在編碼的時候是用實(shí)際類型進(jìn)行申明的。而dynamic被編譯后,實(shí)際是一個 object類型,只不過編譯器會對dynamic類型進(jìn)行特殊處理,讓它在編譯期間不進(jìn)行任何的類型檢查,而是將類型檢查放到了運(yùn)行期。

這從visual studio的編輯器窗口就能看出來。以var聲明的變量,支持“智能感知”,因?yàn)関isual studion能推斷出var類型的實(shí)際類型,而以dynamic聲明的變量卻不支持“智能感知”,因?yàn)榫幾g器對其運(yùn)行期的類型一無所知。對 dynamic變量使用“智能感知”,會提示“此操作將在運(yùn)行時解析”。



注:相關(guān)教程知識閱讀請移步到c#教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵山县| 噶尔县| 焉耆| 香河县| 秦皇岛市| 惠州市| 内乡县| 衡阳县| 科技| 伊宁县| 方城县| 山丹县| 涿鹿县| 南安市| 德安县| 石台县| 南充市| 临朐县| 江源县| 藁城市| 钟山县| 赣州市| 靖边县| 古丈县| 天气| 洛扎县| 遂昌县| 泰和县| 昌都县| 通许县| 黎川县| 辉南县| 建昌县| 平陆县| 望都县| 图片| 庄浪县| 慈溪市| 温泉县| 多伦县| 五河县|