関数にオブジェクトのインスタンスを渡す必要があるため、明らかに、引数として取得するすべての情報を評価スタックにロードする必要があります。ここに私が探しているコードがあります
someClass SomeObject = new someClass();
il.Emit(OpCodes.LoadObject, SomeObject);
il.Emit(OpCodes.CallVirt, MethodInfo Function);
public void Function(Object obj)
{
Type type = typeof(obj);
//do something w.r.t to the type
}
タイプだけでクラスに格納されている情報は必要ありません。プリミティブタイプを使用して決定を下すことはできません
最後に、ポインターを使用して、いくつかのオペコードを使用して型をロードできることを読みました...しかし、ここで完全に失われました。正しい方向へのヘルプまたはポインターは素晴らしいでしょう:)
[アップデート]
私は自分の質問に対する答えを見つけて試してみましたが、それが正しい方法であるかどうかはわかりませんが、オブジェクトを正常に作成してスタックにロードし、それを関数に渡すことができます
ConstructorInfo ci = typeof(SomeClass).GetConstructor(System.Type.EmptyTypes);
IL.Emit(OpCodes.Newobj, ci);
IL.Emit(OpCodes.Call, SomeFunctionMethodInfo);
SomeFunctionMethodInfo は、オブジェクトを引数として受け取る関数です。オブジェクトを関数に渡すことに成功し、それを操作してクラスをオブジェクトとして返すこともできます。
この例への参照はどこにも見つかりませんでした。MSDN で見つけただけです。何か間違っているのでしょうか、それとも欠点がありますか? あなたがそれを修正するか、より良い答えを提供できるかどうか、専門家にお願いします