最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年01月08日 15:45:23   作者:JackWang-CUMT  
C#中的很多關鍵詞用法比較容易混淆,var和dynamic就是其中一組,他們都可以申明動態(tài)類型的變量,但是本質上他們還是有不少區(qū)別的,下面通過本文給大家介紹Dynamic和Var的區(qū)別及如何正確使用dynamic,需要的朋友參考下

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

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

2.var只能用于聲明方法內部的局部變量,而dynamic可用于局部變量,字段,參數。

3.表達式不能轉型為var,但能轉型為dynamic。

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

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

由于dynamic在運行時才檢查類型,所以有時候會出現錯誤,因此使用它必須得法,那么何時使用它比較方便呢?我們先定義一個Person類,然后用反射進行動態(tài)調用起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)的方法的方法調用往往比較繁瑣,而用dyanmic則非常簡化,而且直觀:

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

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

最后給大家總結以下:

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

這從visual studio的編輯器窗口就能看出來。以var聲明的變量,支持“智能感知”,因為visual studion能推斷出var類型的實際類型,而以dynamic聲明的變量卻不支持“智能感知”,因為編譯器對其運行期的類型一無所知。對 dynamic變量使用“智能感知”,會提示“此操作將在運行時解析”。

相關文章

  • C# Color.FromArgb()及系統(tǒng)顏色對照表一覽

    C# Color.FromArgb()及系統(tǒng)顏色對照表一覽

    這篇文章主要介紹了C# Color.FromArgb()及系統(tǒng)顏色對照表一覽,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • WPF實現背景燈光隨鼠標閃動效果

    WPF實現背景燈光隨鼠標閃動效果

    這篇文章主要為大家詳細介紹了WPF實現背景燈光隨鼠標閃動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C#使用Stack<T>進行堆棧設計的實現

    C#使用Stack<T>進行堆棧設計的實現

    堆棧代表了一個后進先出的對象集合,當您需要對各項進行后進先出的訪問時,則使用堆棧,本文主要介紹了C#使用Stack<T>類進行堆棧設計的實現,文中通過示例代碼介紹的非常詳細,感興趣的可以了解一下
    2024-03-03
  • c#檢測usb設備撥插類庫USBClassLibrary分享

    c#檢測usb設備撥插類庫USBClassLibrary分享

    這篇文章主要介紹了c#檢測usb設備撥插類庫USBClassLibrary的簡單示例,需要的朋友可以參考下
    2014-04-04
  • C#匿名委托和Java匿名局部內部類使用方法示例

    C#匿名委托和Java匿名局部內部類使用方法示例

    Java在嵌套類型這里提供的特性比較多,假設:Java的字節(jié)碼只支持靜態(tài)嵌套類,內部類、局部內部類和匿名局部內部類都是編譯器提供的語法糖,這個假設目前沒法驗證(看不懂字節(jié)碼),本文先來看一下C#是如何為我們提供的這種語法糖
    2013-11-11
  • C#實現字符串首字母大寫的方法示例

    C#實現字符串首字母大寫的方法示例

    這篇文章主要給大家介紹了關于利用C#實現字符串首字母大寫的相關資料,這是在最近工作中遇到的一個需求,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • C#12中的Collection expressions集合表達式語法糖詳解

    C#12中的Collection expressions集合表達式語法糖詳解

    C#12中引入了新的語法糖來創(chuàng)建常見的集合,并且可以使用..來解構集合,將其內聯到另一個集合中,下面就跟隨小編一起學習一下C#12中這些語法糖的使用吧
    2023-11-11
  • C# 如何在MVC3中取消備用控制器的選擇

    C# 如何在MVC3中取消備用控制器的選擇

    本篇文章介紹了,如何在MVC3中取消備用控制器的選擇的詳細分析。需要的朋友參考下
    2013-05-05
  • C#全局熱鍵設置與窗體熱鍵設置實例

    C#全局熱鍵設置與窗體熱鍵設置實例

    這篇文章主要介紹了C#全局熱鍵設置與窗體熱鍵設置實例,對C#全局熱鍵設置與窗體熱鍵設置的實現方法與具體代碼進行了詳細的介紹,需要的朋友可以參考下
    2014-10-10
  • 詳解如何將.NET應用轉換成Window服務

    詳解如何將.NET應用轉換成Window服務

    這篇文章主要為大家詳細介紹了如何將.NET8.0應用程序轉換成Windows服務,文中的示例代碼講解詳細,有需要的小伙伴可以跟隨小編一起學習一下
    2024-01-01

最新評論

威远县| 杨浦区| 武邑县| 兰州市| 沙雅县| 富民县| 普定县| 济阳县| 霍林郭勒市| 吉林市| 垫江县| 亚东县| 贺兰县| 浮梁县| 辉县市| 桦南县| 江山市| 璧山县| 驻马店市| 隆昌县| 年辖:市辖区| 蒲江县| 菏泽市| 康平县| 高碑店市| 元江| 昔阳县| 凤庆县| 屏南县| 类乌齐县| 九寨沟县| 八宿县| 文登市| 赣州市| 方正县| 额敏县| 大埔区| 宁明县| 合肥市| 渭源县| 招远市|