reflection - 使用 mono.cecil 向 "existing"类型添加新的构造函数

标签 reflection reflection.emit mono.cecil

我正在尝试将新的重载构造函数添加到现有类型。 我尝试使用 emit 命名空间来做到这一点,但是创建的类型不会继承基类和所有其他方法。

在阅读了一些文章后,我认为 .net 框架内置类是不可能的。

所以我得到了 Mono.Cecil,但找不到任何体面的例子来实现这一点。

我遇到了一个复制方法的示例,但不复制 Prop 、字段等。

最佳答案

这增加了一个空的构造函数

void AddEmptyConstructor(TypeDefinition type, MethodReference baseEmptyConstructor)
{
    var methodAttributes = MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName;
    var method = new MethodDefinition(".ctor", methodAttributes, ModuleDefinition.TypeSystem.Void);
    method.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_0));
    method.Body.Instructions.Add(Instruction.Create(OpCodes.Call, baseEmptyConstructor));
    method.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
    type.Methods.Add(method);
}

您需要对其进行扩展以传递额外的参数。

来自 here

关于reflection - 使用 mono.cecil 向 "existing"类型添加新的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14070017/

相关文章:

c# - 使用 C# 反射调用构造函数

java - 从类中读取字节

c# - 有没有办法在运行时获取构造函数参数的值

.net - 如何使用 Mono.Cecil 更改类型的访问器

c# - 命名空间 'Cecil' 中不存在类型或命名空间名称 'Mono'

c# - 如何以编程方式替换 .NET 程序集中的嵌入式资源?

c# - 对象与使用 C# 反射的目标类型不匹配

c# - 为什么这个 DynamicMethod (ldarg.1, newobj, ret) 会触发 VerificationException?

c# - 当通过 TypeBuilder.CreateType 实现具有参数为 'in' 的方法的接口(interface)时,抛出 TypeLoadException

c# - 如何在 Reflection.Emit 中使用条件