0

オブジェクトを返したいメソッドを持つ動的型を作成しています。これを達成する方法を理解できていません。これが私がこれまでに持っているものです:

// .. stuff to create type builder



MethodBuilder builder =
                typeBuilder.DefineMethod(
                    method.Name,
                    MethodAttributes.Virtual | MethodAttributes.Public,
                    method.CallingConvention,
                    method.ReturnType,
                    typeArray1);
            builder.InitLocals = true;
ILGenerator gen = builder.GetILGenerator();
Object myObjectIdLikeToReturn = someMethodCall();
//gen.??(??????????) // here's where I'm lost
gen.Emit(OpCodes.Ldloc_0);
gen.Emit(OpCodes.Ret);

私が msdn を正しく読んでいれば、スタックで myObjectIdLikeToReturn の参照を取得する必要があると思いますが、運がなかったのです。誰かが私を正しい方向に向けることができますか?

編集:より明確にするために。私はILで同等のものを書こうとしています:

public virtual Object MyNewMethod() {
   return myObjectIdLikeToReturn;
}
4

1 に答える 1

2

次の行があります。

Object myObjectIdLikeToReturn = someMethodCall();

myObjectIdLikeToReturnあなたは「スタックへの参照を取得したい」と言います。しかし、それは不可能です。これらのことが起こっているタイミングを混乱させていると思います。IL 生成コードはコンパイルに似ています。すべてが静的に認識されている必要があります。一方myObjectIdLikeToReturnは、コードの生成中にたまたま存在する変数ですが、実際に生成されるクラスには何の意味もありません。任意の実行時オブジェクトへの参照を「焼き込む」ことはできません。その考えはまったく意味がありません。

唯一の解決策は、何らかの方法で IL に への呼び出しを実行させることsomeMethodCallです。しかし、そのメソッドが存在する場所と、生成された型との関係について詳しく知らなければ、それをどのように達成するかを正確に説明することは困難です。

于 2012-03-07T17:17:56.687 に答える