我們做Web應用程式開發的程式員,我想大家對JavaScript的接觸一定不少,在JavaScript中我們經常用到一個功能,就是可以隨時隨地的建立一個對象,然後就可以自訂的給它定義自己需要的屬性,就如下面的簡單例子 代碼 < script type = " text/javascript " > function getObject(name) { var obj = new Object(); // 自訂兩個屬性 obj.Name = name; obj.Sex = " 男 " ; return obj; }
function onbtnClick() { var retobj = getObject( " 吖龍 " ); // 調用自訂的屬性 alert( " 姓名: " + retobj.Name + " \n性別: " + retobj.Sex); } < / script> 用下面代碼調用 < input type ="button" id ="btnTest" value ="自訂屬性" onclick ="onbtnClick();" /> 單擊自訂屬性按鈕後,會像我們意料的一樣擷取到了相應的自訂屬性值。 曾經,我為上面的方便用法瘋狂和興奮過,這幾天看到了C#4.0也提供了這種用法,更是興奮不已,擷取你已經覺得早就已經熟運於心了,請原諒我的反應遲鈍和步伐慢。今天懷著分享的心給簡單介紹一下C#4.0中的關鍵字dynamic和對象ExpendoObject對象。 我的類型,我做主,編譯器繞道過··· dynamic最大的特點我想莫過於在它的類型在運行時才確定,這也是它與往靜態類型關鍵字的最大區別。如果你在你的代碼操作中用到了dynamic關鍵字去定義一個變數時,那麼這個變數在編譯的時候編譯器不會對它進行類型檢查,允許它到啟動並執行時候再做解釋。在大多數情況下,dynamic 類型與object 類型的行為是一樣的。但是,不會用編譯器對包含 dynamic 類型運算式的操作進行解析或類型檢查,只是將有關該變數編譯到類型 object 的變數中以及有關它的操作資訊打包在一起,在運行時再解釋運行。像下面的代碼: dynamic objDynamic = objDynamic + 1;//編譯通過 object objObject = objObject + 1;//編譯不通過 原因就是編譯器不對dynamic進行類型的檢查,這也是兩者最大的區別。 dynamic關鍵字可以用於很多情況,比如在聲明中,作為屬性、欄位、索引器、參數、傳回值或類型約束的類型等等,用法和其他基本類型的關鍵字很類似,更詳細可以看Dynamic(C#參考) 為了實現一個像上面JavaScript中的功能,在C#4.0中新添加了一個ExpandoObject對象,它位於程式集: System.Core(在 System.Core.dll 中)命名空間: System.Dynamic 中,他的用法和我上面舉得JavaScript的用法很類似,下面偷懶一下,借用用msdn的一個例子: 代碼 static void Main( string [] args) { dynamic employee, manager;
employee = new ExpandoObject();//配合dynamic建立一個ExpandoObject對象 //給這個對象自訂一些屬性 employee.Name = " John Smith " ; employee.Age = 33 ;
manager = new ExpandoObject(); manager.Name = " Allison Brown " ; manager.Age = 42 ; manager.TeamSize = 10 ;
WritePerson(manager); WritePerson(employee); } private static void WritePerson(dynamic person) { Console.WriteLine( " {0} is {1} years old. " , person.Name, person.Age);//調用屬性 // The following statement causes an exception // if you pass the employee object. // Console.WriteLine("Manages {0} people", person.TeamSize); } //輸出"John Smith is 33 years old."; //輸出"Allison Brown is 10 years old."; 和JavaScript中的用法十分類似,從今以後,在像要序列化一些資訊返回用戶端等簡單傳值的情況下,我們也可以像JavaScript一樣很方便的使用這種方法了,由於很少寫文章,加上知識淺薄,文章寫得亂成一團,希望大家原諒,這篇文章只是起到拋磚引玉的作用,更多的資訊可以查看MSDN的技術文檔ExpandoObject 類和dynamic(C# 參考) |