首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 動靜結合程式設計:Duck Typing 與 dynamic 關鍵字深度分析

     編輯:關於C語言

dynamic 關鍵字實現動態型別

string JSon = @"{ ""FirstName"": ""John"", ""LastName"": ""Smith"", ""Age"": 21 }";
dynamic person = CreateFromJson(JSon);

Console.WriteLine("{0} will be {1} next year", person.FirstName, person.Age + 1);
Console.WriteLine(person.ToJSon());

person.Play("basketball"); // 編譯通過,運行時拋出異常

dynamic 讓編譯器跳過型別檢查,將屬性/方法存取轉為反射調用。運行時類型若有對應成員即可運作。

對 dynamic 的反思

完全基於運行時協議,無任何靜態檢查,類似 HTTP+XML。理想方式應為:不檢查物件型別,但檢查屬性型別與方法簽名,如下虛擬語法:

Console.WriteLine("{0} will be {1} next year", person.FirstName<string>, person.Age<int> + 1);
Console.WriteLine(person.ToJSon<string>());
person.Play<string>("basketball");

如此僅名稱動態,型別與簽名靜態,降低運行時錯誤並享受靜態檢查優勢。

C# 2.0 時代即可模擬

object jsonObj = CreateFromJSon(...);
Dynamic person = new Dynamic(JSonObject);

string firstName = person.Property<string>("FirstName");
int age = person.Property<int>("Age");
Func<string> toJson = person.Method<Func<string>>("ToJSon");
Action<string> play = person.Method<Action<string>>("Play");

有興趣可自行實作 Dynamic 類別。

後續預告

下一篇繼續探討 C# 模擬實現動態型別。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved