.NET Framework 4.0向Reflection API引入了幾個項目,其範圍從非常有用到對我的工作至關重要。其中包括Assembly
,Module
,MethodBody
和LocalVariableInfo
以及新的CustomAttributeData
類別的受保護構造函數。有一些項目我仍然需要解決相當麻煩的問題。我相信他們很容易適用於相同的[小型]人羣,因此需要擴展我剛剛列出的類型。我們可以構建一個`OpCode`的實例嗎?
這次:我正在尋找一種方法來構建我自己的參數System.Reflection.Emit.OpCode
結構的實例。我目前調用內部構造函數來創建實例。這對性能沒有任何不利影響,因爲我將構造的項目公開爲類的public static readonly
成員以供重用,但正如您可以想象的那樣,這是非常不理想的場景。
有什麼原因,它是不可能的,以與文檔的當前內部OpCode
構造公衆,指出用戶構建OpCode
s不能與ILGenerator
使用。
編輯:下面是一個例子。通過創建下面的自定義操作碼,我可以在一些中間指令列表之間的字節碼轉換中使用它,而不需要創建臨時局部變量。如果我發射IL,我會將其餘的swap
指令轉換爲有效的IL表示,但在我的情況下,下一步是理解自定義指令的JIT。我使用Prefix2
的前綴0xFD
,它被任何有效的IL操作碼保留和未使用。
/// <summary>
/// Swaps adjacent elements on the evaluation stack. The supplied inline int32 argument gives the
/// index of the topmost item in the pair.
/// </summary>
public static readonly OpCode Swap;
我也將使用這個對於不具有簡單/常見的託管代碼表示,但在不同的本地代碼生成器提供一個簡單的依賴於平臺的表示JIT內部函數。其中之一是ldthread
(加載對當前託管線程RuntimeThread
表示的引用)。
你的意思是http://msdn.microsoft.com/en-us/library/system.reflection.emit.opcode.aspx自1.0以來一直存在? – 2009-08-17 00:18:27
是的,就是那個。 – 2009-08-17 01:02:49