C# dynamic

來源:互聯網
上載者:User

標籤:tca   接受   object   賦值   eth   枚舉   binding   test   字元   

它是C#引入的新類型,它的特點是申明為dynamic類型的變數,不是在編譯時間候確定實際類型的, 而是在運行時。

所以下面的代碼是能夠通過編譯的,但是會在運行時報錯:

dynamic a = "test";a++;

上面代碼內部處理的過程是怎樣的呢?

首先, dynamic類型賦值為字串"test", 運行++操作的時候,.net會去尋找當前的賦實值型別string中是否支援++操作,發現不支援,出現異常。

所以,如果這樣修改一下,就可以讓代碼正常運行起來

dynamic a = "test";a = 1;a++;
dynamic的用法1 直接使用該類型,可以非常方便的插入屬性, 方法
static void Main(string[] args){    dynamic person = new System.Dynamic.ExpandoObject();    person.Name = "cary";    person.Age = 25;    person.ShowDescription = new Func<string>(() => person.Name + person.Age);     Console.WriteLine(person.Name + person.Age + person.ShowDescription());    Console.ReadLine();}
枚舉所有成員
foreach (var property in (IDictionary<String, Object>)dynEO){     Console.WriteLine(property.Key + ": " + property.Value);}
3 簡化反射

常用的處理反射的例子:

object calc = GetCalculator();Type calcType = calc.GetType();object res = calcType.InvokeMember( "Add", BindingFlags.InvokeMethod, null, new object[] { 10, 20 });int sum = Convert.ToInt32(res);

使用dynamic之後:

 dynamic calc = GetCalculator(); int sum = calc.Add(10, 20);

 

使用dynamic的注意事項

有了dynamic,.net就以及有了動態類型的優勢,但是由於對於dynamic類型的所有操作,都是在運行時確定的,所有錯誤無法在編譯時間候出現,使用的時候,就需要非常小心。

因為dynamic是類型,所以如果函數接受的是確定類型的參數,是不能傳入dynamic類型的,這樣會有編譯錯誤。比如:

public int Add(int a, int b){    return a + b;}dynamic test1 = 1;dynamic test2 = 2;Add(test1, test2);

C# dynamic

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.