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

淺析C# Dynamic關(guān)鍵字

 更新時(shí)間:2020年08月05日 10:09:43   作者:每天進(jìn)步多一點(diǎn)  
這篇文章主要介紹了C# Dynamic關(guān)鍵字的相關(guān)資料,文中講解非常細(xì)致,對(duì)大家學(xué)習(xí)C# Dynamic關(guān)鍵字有所幫助,感興趣的朋友可以了解下

dynamic關(guān)鍵字和動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)(DLR)是.Net 4.0中新增的功能。

什么是"動(dòng)態(tài)"?

  編程語(yǔ)言有時(shí)可以劃分為靜態(tài)類(lèi)型化語(yǔ)言和動(dòng)態(tài)類(lèi)型化語(yǔ)言。C#和Java經(jīng)常被認(rèn)為是靜態(tài)化類(lèi)型的語(yǔ)言,而Python、Ruby和JavaScript是動(dòng)態(tài)類(lèi)型語(yǔ)言。

  一般而言,動(dòng)態(tài)語(yǔ)言在編譯時(shí)不會(huì)對(duì)類(lèi)型進(jìn)行檢查,而是在運(yùn)行時(shí)識(shí)別對(duì)象的類(lèi)型。這種方法有利有弊:代碼編寫(xiě)起來(lái)更快、更容易,但無(wú)法獲取編譯器錯(cuò)誤,只能通過(guò)單元測(cè)試和其他方法來(lái)確保應(yīng)用正常運(yùn)行。

  C#最初是作為純靜態(tài)語(yǔ)言創(chuàng)建的,但是C#4添加了一些動(dòng)態(tài)元素,用于改進(jìn)與動(dòng)態(tài)語(yǔ)言和框架之間的互操作性。C# 團(tuán)隊(duì)考慮了多種設(shè)計(jì)選項(xiàng),但最終確定添加一個(gè)新關(guān)鍵字來(lái)支持這些功能:dynamic。

  dynamic關(guān)鍵字可充當(dāng)C#類(lèi)型系統(tǒng)中的靜態(tài)類(lèi)型聲明。這樣,C#就獲得了動(dòng)態(tài)功能,同時(shí)仍然作為靜態(tài)類(lèi)型化語(yǔ)言而存在。

  由于編譯時(shí)不會(huì)去檢查類(lèi)型,所以導(dǎo)致IDE的IntellSense失效。

dynamic、Object還是Var?

  那么,dynamic、Object和var之間的實(shí)際區(qū)別是什么?何時(shí)使用它們?

  先說(shuō)說(shuō)var,經(jīng)常有人會(huì)拿dynamic和var進(jìn)行比較。實(shí)際上,var和dynamic完全是兩個(gè)概念,根本不應(yīng)該放在一起做比較。

  var實(shí)際上編譯器拋給我們的語(yǔ)法糖,一旦被編譯,編譯器就會(huì)自動(dòng)匹配var變量的實(shí)際類(lèi)型,并用實(shí)際類(lèi)型來(lái)替換該變量的聲明,等同于我們?cè)诰幋a時(shí)使用了實(shí)際類(lèi)型聲明。而dynamic被編譯后是一個(gè)Object類(lèi)型,編譯器編譯時(shí)不會(huì)對(duì)dynamic進(jìn)行類(lèi)型檢查。

  再說(shuō)說(shuō)Object,上面提到dynamic類(lèi)型再編譯后是一個(gè)Object類(lèi)型,同樣是Object類(lèi)型,那么兩者的區(qū)別是什么呢?

  除了在編譯時(shí)是否進(jìn)行類(lèi)型檢查之外,另外一個(gè)重要的區(qū)別就是類(lèi)型轉(zhuǎn)化,這也是dynamic很有價(jià)值的地方,dynamic類(lèi)型的實(shí)例和其他類(lèi)型的實(shí)例間的轉(zhuǎn)換是很簡(jiǎn)單的,開(kāi)發(fā)人員能夠很方便地在dyanmic和非dynamic行為間切換。任何實(shí)例都能隱式轉(zhuǎn)換為dynamic類(lèi)型實(shí)例,見(jiàn)下面的例子:

dynamic d1 = 7;
dynamic d2 = "a string";
dynamic d3 = System.DateTime.Today;
dynamic d4 = System.Diagnostics.Process.GetProcesses();

反之亦然,類(lèi)型為dynamic的任何表達(dá)式也能夠隱式轉(zhuǎn)換為其他類(lèi)型。

int i = d1;
string str = d2;
DateTime dt = d3;
System.Diagnostics.Process[] procs = d4;

dynamic與反射  

以前我們這樣使用反射:

public class DynamicSample
{
 public string Name { get; set; }
 
 public int Add(int a, int b)
 {
  return a + b;
 }
}
DynamicSample dynamicSample = new DynamicSample();
 //create instance為了簡(jiǎn)化演示,我沒(méi)有使用反射
var addMethod = typeof(DynamicSample).GetMethod("Add");
int re = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 });

現(xiàn)在,我們有了簡(jiǎn)化的寫(xiě)法:

dynamic dynamicSample2 = new DynamicSample();
int re2 = dynamicSample2.Add(1, 2);

我們可能會(huì)對(duì)這樣的簡(jiǎn)化不以為然,畢竟看起來(lái)代碼并沒(méi)有減少多少,此方法也不能使用 IntelliSense,但是,如果考慮到效率兼優(yōu)美兩個(gè)特性,那么dynamic的優(yōu)勢(shì)就顯現(xiàn)出來(lái)了。編譯器對(duì)dynamic進(jìn)行了優(yōu)化,比沒(méi)有經(jīng)過(guò)緩存的反射效率快了很多。

以上就是淺析C# Dynamic關(guān)鍵字的詳細(xì)內(nèi)容,更多關(guān)于C# Dynamic關(guān)鍵字的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 比較2個(gè)datatable內(nèi)容是否相同的方法

    比較2個(gè)datatable內(nèi)容是否相同的方法

    這篇文章主要介紹了比較2個(gè)datatable內(nèi)容是否相同的方法,大家參考使用吧
    2014-01-01
  • 詳解C#如何利用爬蟲(chóng)技術(shù)實(shí)現(xiàn)快捷租房

    詳解C#如何利用爬蟲(chóng)技術(shù)實(shí)現(xiàn)快捷租房

    做為一個(gè)碼農(nóng),大部分都集中在一二線城市,所以租房也就無(wú)可避免,面對(duì)如今五花八門(mén)的租房信息,往往很難找到合適的房子。本文教你如何利用爬蟲(chóng)技術(shù)實(shí)現(xiàn)快捷租房,感興趣的可以了解一下
    2022-09-09
  • C#利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正

    C#利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正

    這篇文章主要為大家詳細(xì)介紹了C#如何利用deskew算法實(shí)現(xiàn)圖像文本傾斜校正,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • C#?StackExchange.Redis?用法匯總

    C#?StackExchange.Redis?用法匯總

    StackExchange.Redis?是?C#?操作?Redis?數(shù)據(jù)庫(kù)的客戶(hù)端,本文通過(guò)圖文并茂的形式給大家介紹C#?StackExchange.Redis?用法匯總,感興趣的朋友一起看看吧
    2021-12-12
  • WPF InkCanvas繪制矩形和橢圓

    WPF InkCanvas繪制矩形和橢圓

    這篇文章主要為大家詳細(xì)介紹了WPF InkCanvas繪制矩形和橢圓,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C#實(shí)現(xiàn)接收QQ郵件的示例代碼

    C#實(shí)現(xiàn)接收QQ郵件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C#如何使用pop協(xié)議來(lái)實(shí)現(xiàn)一下接收QQ郵件的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-08-08
  • C#實(shí)現(xiàn)打造氣泡屏幕保護(hù)效果

    C#實(shí)現(xiàn)打造氣泡屏幕保護(hù)效果

    本文是介給大家介紹一個(gè)很好玩的小程序:氣泡屏幕保護(hù)!類(lèi)似于windows的屏保功能,有需要的朋友可以參考一下。
    2016-10-10
  • C# Assembly.Load案例詳解

    C# Assembly.Load案例詳解

    這篇文章主要介紹了C# Assembly.Load案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#實(shí)現(xiàn)抓取和分析網(wǎng)頁(yè)類(lèi)實(shí)例

    C#實(shí)現(xiàn)抓取和分析網(wǎng)頁(yè)類(lèi)實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)抓取和分析網(wǎng)頁(yè)類(lèi),實(shí)例分析了C#抓取及分析網(wǎng)頁(yè)中文本及連接的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-05-05
  • C#打印Word文檔的4種方法

    C#打印Word文檔的4種方法

    Word文檔是日常辦公和學(xué)習(xí)中不可或缺的一部分,這篇文章將提供以下4種通過(guò)C# 打印Word文檔的方法,以適應(yīng)不同的場(chǎng)景需求,需要的小伙伴可以了解下
    2025-02-02

最新評(píng)論

进贤县| 黎平县| 滨海县| 长治县| 若羌县| 台南市| 九寨沟县| 河池市| 新巴尔虎右旗| 黔西| 和顺县| 淅川县| 青海省| 宁武县| 越西县| 嵊州市| 福海县| 合作市| 资中县| 北辰区| 新郑市| 苏尼特左旗| 象州县| 玛曲县| 玉树县| 固阳县| 东辽县| 金沙县| 华宁县| 密云县| 周宁县| 灵川县| 孟津县| 磐石市| 石柱| 思茅市| 潍坊市| 夏津县| 饶河县| 铁岭县| 台东市|