3

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

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

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

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

4

1 回答 1

8

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

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);
}

您将需要扩展它以传递额外的参数。

这里

于 2013-01-05T10:05:43.647 回答