2013年1月29日 星期二

ExpandoObject

C# 支援 dynamic,你可以建立System.Dynamic.ExpandoObject物件,可動態新增、移除成員。成員包含屬性、方法、事件等。

例如以下動態建立一個ExpandoObject物件,新增EmpID 、EmpName 與Age 三個屬性,並新增一個Print 方法:

dynamic emp = new System.Dynamic.ExpandoObject( );
emp.EmpID = 1;
emp.EmpName = "Mary";
emp.Age = 25;
emp.Print = (Action) ( ( ) => {
                                            Console.WriteLine( 
                                              emp.EmpID.ToString( ) + "," +
                                              emp.EmpName + "," +
                                              emp.Age.ToString( ));
                                        }
                            );
Console.WriteLine( emp.EmpID);
Console.WriteLine( emp.EmpName);
Console.WriteLine( emp.Age);
emp.Print( );

若要移除其成員,可以使用Remove方法,例如以下移除Age:

   ( (IDictionary<String , Object>) emp ).Remove( "Age" );

在Visual Studio 2012中斷模式檢視時,Age已移除:

image

2013年1月8日 星期二

.NET 組件(Assambly)筆記


.NET 組件(Assambly)是由以下部分組成:


CLR檔案表頭
CIL程式
Type Metadata
Assembly Manifest
內嵌資源(選擇性的)
 
Windows檔案表頭

Windows檔案表頭描述組件可以被哪個版本的作業系統載入執行,也描述了組件可以被載入哪一種類型的專案執行。你可以使用dumpbin.exe工具程式搭配/headers參數來讀取它們的內容:
dumpbin /headers ClassLibrary1.dll




CLR檔案表頭

所有.NET組件都有CLR檔案表頭,包含許多旗標,描述檔案中metadata、Resource的位置,Strong Name資訊等等。一樣可以使用dumpbin來檢視:

dumpbin /clrheader ClassLibrary1.dll

總瀏覽量