我正在尝试将新重载的构造函数添加到现有类型。 我试图用emit命名空间来做,但是创建的类型不会继承基类和所有其他方法。
在阅读了一些文章之后,我决定用.net框架内置类来实现它。
所以我得到了Mono.Cecil,但找不到任何体面的例子来实现这个目标。
我遇到过一个复制方法但没有道具,字段等的示例。
答案 0 :(得分:7)
这会添加一个空构造函数
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);
}
您需要对其进行扩展以传递额外的参数。
从这里https://github.com/Fody/EmptyConstructor/blob/master/Fody/ModuleWeaver.cs