reflection.emit

    4熱度

    1回答

    我想在集成測試中動態創建程序集以測試某些程序集操作類。如果我用下面的代碼來創建測試組件: var domain = AppDomain.CurrentDomain; var builder = domain.DefineDynamicAssembly( new AssemblyName(assemblyName), AssemblyBuilderAccess.Save,

    15熱度

    2回答

    爲什麼PropertyInfo獲取和設置屬性的方法如此緩慢?如果我使用Reflection.Emit構建代理,速度會更快。 他們是否做了重要的事情,以便他們採取的時間是合理的?那是...我錯過了什麼,通過使用Reflection.Emit建立代表而不是使用PropertyInfo的GetValue和SetValue(除了開發速度)? PS:請給出證據,不僅僅是猜測!

    5熱度

    1回答

    發光功能,我有以下的C#代碼: public static double f(double x1, double x2 = 1) { return x1 * x2; } 在這裏,它的IL代碼(ILSpy): .method public hidebysig static float64 f ( float64 x1, [opt] float64 x

    0熱度

    1回答

    嘗試使用這裏示出類作爲Activator.CreateInstance()的樣品 http://codeblocks.codeplex.com/wikipage?title=FasterActivator%20Sample public static List<T> SortedCollection<T>(SPListItemCollection items, ListSortType sortT

    1熱度

    1回答

    我有一個基類,它有一個嵌入列表,可供所有子類使用以返回一個已排序的集合。 我一直在使用Activator.CreateInstance(),但與簡單的new()函數相比,這是TERRBILY較慢。 我發現了一種使用Emit IL的方法,它的速度幾乎和new()一樣快,但是如果我的類不公開,我會得到一個MethodAccessException錯誤。這似乎很常見。 有沒有辦法解決這個問題? 代碼在這

    0熱度

    1回答

    我已經在C#中使用EnumBuilder根據數據庫中的表創建枚舉。但是,隨着我的框架的設計,我們還包含一個屬性,它通常是與數據庫中的ID關聯的名稱。 我想要完成的是保持與數據庫表相關的枚舉最新,而不必手動更新它們,並且不會失去它當前具有的屬性功能(即使它們很少使用) 。 那麼,是否有可能建立一個也包含屬性的枚舉呢? 即 public enum Example { [StringValu

    4熱度

    1回答

    鑑於識別非通用類的開放通用方法的MethodInfo實例,考慮下面的僞代碼: class Foo { void FooMethod<T>() {} } public static void PrintMethodInfo(RuntimeMethodHandle methodHandle) { var mi = (MethodInfo) MethodBase.GetMethodFro

    3熱度

    1回答

    我正在開發一個框架,它允許定義我稱之爲任意對象的演示文稿 - 您可以將這種演示文稿理解爲對象的一個​​方面。例如:某個應用程序的對象應該被渲染引擎可視化。您不需要擴展對象本身的類型,而是提供由服務(渲染引擎)提供的演示文稿,該服務從對象中讀取數據(並可以將數據寫入其他演示文稿的上下文中)。 該框架期望一些接口由應用程序類型實現以便使用該功能。然而,如果應用程序不提供這些接口實現方式中,框架被自動創

    7熱度

    1回答

    爲我自己的語言編寫一個編譯器,我試圖用Reflection.Emit框架生成一些MSIL代碼。當我聲明局部變量時使用int時它工作正常。但是,當我想聲明一個我尚未編譯的類型的局部變量時,由於DeclareLocal()需要Type作爲參數,所以我遇到了麻煩。這是我未編譯的類,說A,仍然需要使用 assemblyBuilder = Thread.GetDomain().DefineDynamicAs

    2熱度

    1回答

    我目前發射到[mscorlib]System.Console::Write(char)一個電話如下: ilg.EmitCall(OpCodes.Call, typeof(Console).GetMethods().First(m => m.Name == "Write" && m.GetParameters().Length == 1 && m.Get