3

新しいオーバーロードされたコンストラクターを既存の型に追加しようとしています。名前空間を出力して実行しようとしましたが、作成された型は基本クラスと他のすべてのメソッドを継承しません。

そして、いくつかの記事を読んだ後、.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 に答える