System.Reflection.Emit命名空間類可用于動態發出Microsoft中間語言(MSIL)代碼,以便生成的代碼可以直接執行。反射也用于獲取有關類及其成員的信息。換句話說,反射是一種技術,允許您檢查描述類型及其成員的元數據,你可能以編程方式訪問過組件對象模型類型庫, .NET中的反射非常相似,但功能強大且易于使用。使用.NET編譯器編譯源文件時,編譯器會產生源文件中語句中的MSIL代碼以及描述文件中定義的類型的元數據。正是這個元數據,.NET中的反射API使你能夠檢查。在這個System.Reflection命名空間中,有一些類可用于幫助訪問程序中固有的結構,比如類、類型、字段、結構、枚舉、成員和方法。例如,您使用Type類來標識所反映的類的類型,FieldInfo類表示結構或枚舉的字段。MemberInfo類表示反射類的成員,并使用MethodInfo類表示反射類的方法。PrimeRealFipe類表示反射類中的方法的參數。
使用System.Reflection.Emit命名空間類在可以編譯時創建代碼,但前提是必須懂IL代碼。(本文不做IL代碼詳解,因為我也不會。。。)事實上,你實際編寫的是就是幕后的MSIL本身。你可以使用反射在內存中定義程序集,為該程序集創建類/模塊,然后為該模塊創建其他模塊成員和新類型。你同樣也可以使用Emit來構造程序集。Reflection.Emit是一個強大的命名空間,我們可以在運行時動態地發出瞬態和持久化程序集。Reflection.Emit產生一個低級,語言中立的MSIL。通常,我們通過將源代碼保存到磁盤然后編譯該源代碼來創建程序集,然后我們調用我們需要從該程序集中使用的類的方法,該程序集是在磁盤上編譯的。但是你可以想象,這涉及額外的磁盤寫入和讀取工作!使用反射生成代碼,我們可以省略此開銷并立即將操作代碼直接發送到內存中。反射發射只不過是直接在代碼中編寫任何匯編代碼,然后即時調用生成的代碼。這也并不是說反射效率就是高,因為在運行期產生指令也是需要時間,各有優缺點。
System.Reflection.Emit命名空間提供用戶動態創建.exe文件所需的類。它的類允許編譯器或工具發出元數據和MSIL。因此,您可以動態地在磁盤上創建.exe文件,就像運行代碼,保存代碼并調用編譯器來編譯代碼一樣。大多數情況下,您需要此功能和此命名空間用于自定義腳本引擎和編譯器。
Reflection.Emit命名空間有許多可用于重要的的類。以下是兩個最重要的:
??? AssemblyBuilder類是在運行時發出代碼并具有創建動態模塊的方法的任何應用程序的起點。
??? ModuleBuilder類用作在運行時向動態程序集添加類和結構等類型的起點。
生成MSIL指令的ILGenerator.OpCodes類包括其所需字段中的所有IL指令。MSIL是CLR或中間語言的基本匯編語言的無類型操作代碼。當您編寫任何C#代碼并對其進行編譯時,它將首先轉換為MSIL。然后,當您在MSIL中調用程序集時,它將以相應的機器語言進行轉換和執行。學習MSIL的最簡單方法是反匯編您編譯的簡單代碼。您可以使用.NET SDK實用程序之一ILDasm.exe(IL反匯編程序)在Vs插件庫下載即可,來反匯編任何已編譯的.NET代碼。
使用System.Reflection.Emit命名空間類在可以編譯時創建代碼,但前提是必須懂IL代碼。(本文不做IL代碼詳解,因為我也不會。。。)事實上,你實際編寫的是就是幕后的MSIL本身。你可以使用反射在內存中定義程序集,為該程序集創建類/模塊,然后為該模塊創建其他模塊成員和新類型。你同樣也可以使用Emit來構造程序集。Reflection.Emit是一個強大的命名空間,我們可以在運行時動態地發出瞬態和持久化程序集。Reflection.Emit產生一個低級,語言中立的MSIL。通常,我們通過將源代碼保存到磁盤然后編譯該源代碼來創建程序集,然后我們調用我們需要從該程序集中使用的類的方法,該程序集是在磁盤上編譯的。但是你可以想象,這涉及額外的磁盤寫入和讀取工作!使用反射生成代碼,我們可以省略此開銷并立即將操作代碼直接發送到內存中。反射發射只不過是直接在代碼中編寫任何匯編代碼,然后即時調用生成的代碼。這也并不是說反射效率就是高,因為在運行期產生指令也是需要時間,各有優缺點。
System.Reflection.Emit命名空間提供用戶動態創建.exe文件所需的類。它的類允許編譯器或工具發出元數據和MSIL。因此,您可以動態地在磁盤上創建.exe文件,就像運行代碼,保存代碼并調用編譯器來編譯代碼一樣。大多數情況下,您需要此功能和此命名空間用于自定義腳本引擎和編譯器。
Reflection.Emit命名空間有許多可用于重要的的類。以下是兩個最重要的:
??? AssemblyBuilder類是在運行時發出代碼并具有創建動態模塊的方法的任何應用程序的起點。
??? ModuleBuilder類用作在運行時向動態程序集添加類和結構等類型的起點。
生成MSIL指令的ILGenerator.OpCodes類包括其所需字段中的所有IL指令。MSIL是CLR或中間語言的基本匯編語言的無類型操作代碼。當您編寫任何C#代碼并對其進行編譯時,它將首先轉換為MSIL。然后,當您在MSIL中調用程序集時,它將以相應的機器語言進行轉換和執行。學習MSIL的最簡單方法是反匯編您編譯的簡單代碼。您可以使用.NET SDK實用程序之一ILDasm.exe(IL反匯編程序)在Vs插件庫下載即可,來反匯編任何已編譯的.NET代碼。