欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年01月08日 15:45:23   作者:JackWang-CUMT  
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則可以不提供,它是在運行時才確定類型。

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)行任何
//的類型檢查,而是將類型檢查放到
//了運行期
dynamic dyn = ;
// dynamic dynOk;
dyn = "hello world";
//error 字符串沒有 [ fn不存在的方法 ] 的方法
//但在語法檢查時通過,不會提示語法錯誤
var s = dyn.fn不存在的方法();//runtime error 

由于dynamic在運行時才檢查類型,所以有時候會出現(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做比較。實際上,var和dynamic完全是兩個概念,根本不應(yīng)該放在一起做 比較。var實際上是編譯期拋給我們的“語法糖”,一旦被編譯,編譯期會自動匹配var 變量的實際類型,并用實際類型來替換該變量的申明,這看上去就好像我們在編碼的時候是用實際類型進(jìn)行申明的。而dynamic被編譯后,實際是一個 object類型,只不過編譯器會對dynamic類型進(jìn)行特殊處理,讓它在編譯期間不進(jìn)行任何的類型檢查,而是將類型檢查放到了運行期。

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

相關(guān)文章

  • C#多線程之Thread中Thread.IsAlive屬性用法分析

    C#多線程之Thread中Thread.IsAlive屬性用法分析

    這篇文章主要介紹了C#多線程之Thread中Thread.IsAlive屬性用法,實例分析了C#判斷線程可用狀態(tài)的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#學(xué)習(xí)筆記之飛行棋項目

    C#學(xué)習(xí)筆記之飛行棋項目

    這篇文章主要為大家詳細(xì)介紹了C#控制臺實現(xiàn)飛行棋項目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 在WCF數(shù)據(jù)訪問中使用緩存提高Winform字段中文顯示速度的方法

    在WCF數(shù)據(jù)訪問中使用緩存提高Winform字段中文顯示速度的方法

    這篇文章主要介紹了在WCF數(shù)據(jù)訪問中使用緩存提高Winform字段中文顯示速度的方法,是非常實用的功能,需要的朋友可以參考下
    2014-09-09
  • 談一談autofac組件的實例范圍

    談一談autofac組件的實例范圍

    這篇文章主要和大家聊一聊autofac組件的實例范圍,探討autofac組件的實例范圍,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Unity實現(xiàn)打磚塊游戲

    Unity實現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細(xì)介紹了Unity實現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 使用C#語言實現(xiàn)的查詢條件界面展開和收起功能

    使用C#語言實現(xiàn)的查詢條件界面展開和收起功能

    這篇文章主要介紹了使用C#語言實現(xiàn)的查詢條件界面展開和收起功能的完美解決方案,需要的朋友可以參考下
    2016-11-11
  • C#與C++與互操作實例講解

    C#與C++與互操作實例講解

    在本篇文章里小編給大家整理了關(guān)于C#與C++與互操作實例以及相關(guān)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • C#交錯數(shù)組用法實例

    C#交錯數(shù)組用法實例

    這篇文章主要介紹了C#交錯數(shù)組用法,較為詳細(xì)的分析了交錯數(shù)組的概念、用法并實例分析了交錯數(shù)組的使用技巧,需要的朋友可以參考下
    2015-04-04
  • C#處理datagridview虛擬模式的方法

    C#處理datagridview虛擬模式的方法

    這篇文章主要介紹了C#處理datagridview虛擬模式的方法,實例分析了C#中datagridview的使用技巧,需要的朋友可以參考下
    2015-06-06
  • c#文檔圖片自動糾偏

    c#文檔圖片自動糾偏

    最近找到一個不錯的文檔圖片自動糾偏的方法,現(xiàn)在跟大家分享一下,需要的朋友可以參考下
    2014-03-03

最新評論