reflection.emit相关内容

如何动态创建一个类?

我有一个如下所示的课程: 公共类字段{公共字符串字段名;公共字符串字段类型;} 还有一个对象 List 带有值: {"EmployeeID","int"},{"EmployeeName","String"},{"名称","字符串"} 我想创建一个如下所示的类: 类 DynamicClass{int EmployeeID,字符串员工姓名,字符串指定} 有没有办法做到这一点? ..
发布时间:2022-01-31 15:37:48 C#/.NET

如何发出委托或 lambda 表达式

我想发出一个返回 Func 的方法.在这个方法中,我必须创建一个委托或 lambda 表达式,它正好为返回类型提供服务. 它应该看起来像这样: //我有一个解析方法,将在我缺失的方法中调用//这是它的签名:对象解析(参数对象[] args);//这就是我使用它的方式:var barFactory = (Func)MissingMethod(typeof(IBar));var bar = b ..
发布时间:2022-01-18 12:44:58 C#/.NET

在动态事件处理程序中引用“this"

在我的“myClass"类中,我使用 Reflection.Emit 为 myClass 类的成员之一动态编写事件处理程序. 我已经成功完成了. 现在,我想修改事件处理程序以调用 myClass 类中的实例方法之一. 但是,我无法弄清楚如何使用 Reflection.Emit 将对“this"的引用推送到 MSIL 堆栈.在事件处理程序中,Ldarg_0 不是对“this"的引用 ..
发布时间:2022-01-15 12:14:03 C#/.NET

Call 和 Callvirt

CIL 指令“Call"和“Callvirt"有什么区别? 解决方案 call 用于调用非虚拟、静态或超类方法,即调用的目标不受覆盖.callvirt 用于调用虚方法(因此,如果 this 是覆盖该方法的子类,则调用子类版本). ..
发布时间:2021-12-26 14:17:46 C#/.NET

快速创建对象而不是 Activator.CreateInstance(type)

我正在努力提高应用程序的性能.我们有很多 Activator.CreateInstance 调用引起了一些麻烦. 我们基于一个接口(ITabDocument)实例化了很多类,环顾四周后,我想到了使用这段代码: 代码并不比使用我们拥有的 Activator.CreateInstance 代码更好(实际上稍微慢一点). public static Func;CreateInstance ..
发布时间:2021-12-26 14:13:36 C#/.NET

如何在运行时使用 Reflection.emit 创建方法

我正在使用反射发射在运行时创建一个对象.我成功创建了字段、属性和获取设置方法.现在我想添加一个方法.为简单起见,假设该方法仅返回一个随机数.如何定义方法体? 编辑: 是的,我一直在查看 msdn 文档和其他参考资料,并且开始对这些内容产生兴趣.我看到上面的例子是如何添加和/或乘法的,但是如果我的方法正在做其他事情怎么办.我如何定义那个“东西"假设我正在动态生成下面的类,我将如何创建 G ..
发布时间:2021-12-25 08:08:48 其他开发

C# 反射 - 如何为结构设置字段值

如何使用 DynamicMethod 通过反射将值设置到结构字段 - myStruct.myField 中?当我调用 setter(myStruct, 111) 时,值未设置,因为 MyStruct 是值类型.Console.WriteLine(myStruct.myField) 显示值 3. 如何修改GetDelegate方法来设置myStruct.myField的值? 公共结构MyStru ..
发布时间:2021-12-23 17:13:30 C#/.NET

通用 FromEvent 方法

使用新的 async/await 模型,生成一个在事件触发时完成的 Task 相当简单;你只需要遵循这个模式: 公共类MyClass{公共事件 Action OnComplete;}公共静态任务 FromEvent(MyClass obj){TaskCompletionSourcetcs = new TaskCompletionSource();obj.OnCompletion += () => ..
发布时间:2021-11-30 13:36:04 C#/.NET

在非当前 AppDomain 上使用 DefineDynamicAssembly 动态创建程序集时出现异常

我想在集成测试中动态创建程序集,以便测试一些程序集操作类.如果我使用以下代码来创建测试程序集: var domain = AppDomain.CurrentDomain;var builder = domain.DefineDynamicAssembly(新的程序集名称(程序集名称),AssemblyBuilderAccess.Save,目录);builder.Save(文件名); 然后一切运 ..
发布时间:2021-11-24 11:50:52 C#/.NET

将现有方法附加到动态程序集而不是为其生成 IL

我是 Reflection.Emit API 的新手,并且生成了一个带有入口点的最小程序集,该入口点基于一些简单的 I/O 检查返回一个退出代码.创建外部程序集的原因是一段代码需要在当前进程空间之外运行,并且本身将是瞬态的.它最终会被创建的应用程序删除. 话虽如此,要生成的代码相当复杂,我宁愿避免为瞬态程序集创建单独的项目.我不太了解 IL,无法将 ILGenerator 用于这种复杂的方法 ..
发布时间:2021-11-24 11:49:28 C#/.NET

在运行时创建 WCF 服务

我们将根据运行时读取的元数据构建 Web 服务.我的意思是整个网络服务:签名、合同和实施. 从这里我看到两条主要路径. 第一个路径是您生成代码.要么在字符串中生成 C# 代码并即时编译它,要么更优雅(更复杂),您发出 MSIL 代码.这样您就有了 WCF 代码,WCF 将负责从中生成 WSDL. 第二条路径是使用通用服务.具有接受一切的操作 Message Process(Mes ..
发布时间:2021-09-22 19:08:27 其他开发

从 Type 转换为 TypeBuilder

我正在运行时创建一个类,其中一些类型已经在 ModuleBuilder 中创建,我想重用它们,但我只有 Type 而没有 TypeBuilder(这是我需要的才能更改它) 有没有办法从 Type 转换为 TypeBuilder? Type moduleType = ModuleBuilder.GetType(inXmlTemplateProperty.PropertyName);如果(模块 ..
发布时间:2021-09-11 20:17:20 C#/.NET

使用 IL Emit 加载 ParameterInfo

我目前正在使用 使用 IL Emit 作为指导调用现有对象的方法,我已经可以做任何有问题的事情.现在,我向参数添加了一个属性,我想加载该特定参数的属性,以便我可以调用该属性内的方法. 我知道这可以通过加载 MethodInfo 然后获取 ParameterInfo 然后获取该 ParameterInfo 在 IL 中的属性来完成;我只是想避免写那么多 IL. 有没有办法像链接帖子中提到 ..
发布时间:2021-07-06 18:48:24 C#/.NET

Reflection.Emit 抛出 BadImageFormatException

我试图在运行时生成一个新的类/对象. 阅读后如何使用 PropertyBuilder 创建私有财产,我已经设法实现了一切,一切都如我所愿. 但是一旦我尝试实例化我的新对象,我就会收到 BadImageFormatException 这似乎是一个类似的问题,但尚未解决是有什么方法可以检测 System.Reflection.Emit? 这是我的代码: 字段: 内部类字 ..
发布时间:2021-07-06 18:46:26 C#/.NET

使用 Reflection.Emit 实现接口

假设我有以下界面: 公共接口 IMyService{void SimpleMethod(int id);int 你好(字符串温度);} 并且想要生成一个看起来像这样的类(使用反射发射). 公共类 MyServiceProxy : IMyService{IChannel_channel;公共 MyServiceProxy(IChannel 通道){_channel = 频道;}公共无效简单方法 ..
发布时间:2021-06-22 20:33:08 C#/.NET