程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Dynamic和Var的差別及dynamic應用詳解

Dynamic和Var的差別及dynamic應用詳解

編輯:C#入門知識

Dynamic和Var的差別及dynamic應用詳解。本站提示廣大學習愛好者:(Dynamic和Var的差別及dynamic應用詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Dynamic和Var的差別及dynamic應用詳解正文


C#中的許多症結詞用法比擬輕易混雜,var和dynamic就是個中一組,他們都可以聲名靜態類型的變量,然則實質上他們照樣有很多差別的。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類,然後用反射停止靜態挪用起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!" }); 

  在反射的時刻,傳統的辦法的辦法挪用常常比擬繁瑣,而用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變量應用“智能感知”,會提醒“此操作將在運轉時解析”。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved