に静的メソッドからオブジェクトを返すこれはhere提供ソリューションの拡張です。私はオブジェクトを返す静的メソッドを作成しました。私の目標は、実行時にこの静的メソッドが返すオブジェクトを返すように定義した型の動的メソッドを作成することです。これまでの私のコード:C#のコールおよびIL
// type builder and other prep stuff removed for sake of space and reading
private void EmitReferenceMethodBody(Type returnType)
{
MethodBuilder builder =
typeBuilder.DefineMethod(
method.Name,
MethodAttributes.Virtual | MethodAttributes.Public,
method.CallingConvention,
method.ReturnType,
typeArray1);
builder.InitLocals = true;
ILGenerator gen = builder.GetILGenerator();
MethodInfo getStoredObject = typeof(ObjectStore).GetMethod("GetStoredObject", BindingFlags.Public | BindingFlags.Static);
MethodInfo getTypeFromHandle = typeof(Type).GetMethod("GetTypeFromHandle");
gen.Emit(OpCodes.Ldtoken, returnType);
gen.Emit(OpCodes.Call, getTypeFromHandle);
gen.Emit(OpCodes.Call, getStoredObject);
gen.Emit(OpCodes.Ret);
}
は、更新されたコードは現在、メソッドを呼び出すのではなく、その後、動的に作成された型の型変数を渡す戻り値のように見えます。
したがって、load arg 0 emitを削除すると、これは静的メソッドを呼び出すことができますが、returnType変数を静的メソッドに渡したいのですが、 'this'を渡しているようです。私が静的メソッドをデバッグするとき、 'Type'型のparamはreturnTypeの値ではなく、私が作成した動的クラスの型です。 – OnResolve
メソッドのシグネチャが次のようになっていることを確認してください: 'Object GetStoredObject(Type returnType);'。もしそうなら、あなたは本当に引数を渡す必要があります。しかし、あなたが実際に渡そうとしているのは、「タイプ」ですか? –
"public static Object GetStoredObject(Type contract)" EmitReferenceMethodBody(Type returnType)という上記のメソッドは、静的メソッドに渡すタイプを渡します。 – OnResolve