我正在尝试将新的重载构造函数添加到现有类型。我尝试使用 emit 命名空间来做到这一点,但是创建的类型不会继承基类和所有其他方法。
在阅读了一些文章之后,我认为 .net 框架内置类是不可能的。
所以我得到了 Mono.Cecil,但找不到任何像样的例子来实现这一点。
我遇到了一个复制方法的示例,但不复制道具、字段等。
我正在尝试将新的重载构造函数添加到现有类型。我尝试使用 emit 命名空间来做到这一点,但是创建的类型不会继承基类和所有其他方法。
在阅读了一些文章之后,我认为 .net 框架内置类是不可能的。
所以我得到了 Mono.Cecil,但找不到任何像样的例子来实现这一点。
我遇到了一个复制方法的示例,但不复制道具、字段等。
这添加了一个空的构造函数
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);
}
您将需要扩展它以传递额外的参数。
从这里