我正在尝试将新的重载构造函数添加到现有类型。 我尝试使用 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/