日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

【转】C# 动态对象(dynamic)的用法

發(fā)布時間:2023/12/10 C# 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】C# 动态对象(dynamic)的用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

說到正確用法,那么首先應(yīng)該指出一個錯誤用法:

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

我認(rèn)為dynamic很有價值的一點是:

類型轉(zhuǎn)換

Dynamic類型的實例和其他類型的實例間的轉(zhuǎn)換是很簡單的,開發(fā)人員能夠很方便地在dyanmic和非dynamic行為間切換。任何實例都能隱式轉(zhuǎn)換為dynamic類型實例,見下面的例子:

dynamic d1 = 7;

dynamic d2 = "a string";

dynamic d3 = System.DateTime.Today;

dynamic d4 = System.Diagnostics.Process.GetProcesses();

?

Conversely, an implicit conversion can be dynamically applied to any expression of type dynamic.

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

int i = d1;

string str = d2;

DateTime dt = d3;

System.Diagnostics.Process[] procs = d4;

?

dynamic可以簡化反射。

首先還是聲明一下,使用場景:

1、如果編譯時函數(shù)名稱確定,對象類型運行時確定,那么運用dynamic是一個好主意。
2、如果編譯時函數(shù)名稱確定,對象類型在編譯時也確定,那就既不需要反射也不需要dynamic。
3、如果函數(shù)名稱在運行時才能確定的話,那函數(shù)名稱就是一個字符串,必須使用反射來完成。

以前我們這樣使用反射:

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

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

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

總結(jié)

以上是生活随笔為你收集整理的【转】C# 动态对象(dynamic)的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。