C# で、クラスをインスタンス化せずにメソッド (非静的) を呼び出すことは可能ですか?
public class MyClass
{
public void MyMethod()
{
Console.WriteLine("method called");
}
}
System.Reflection.Emit 名前空間を使用してこのメソッドを試しました。MyMethod() の IL を動的メソッドにコピーしましたが、例外が発生しました。
FatalExecutionEngineError が検出されました: ランタイムで致命的なエラーが発生しました。エラーのアドレスは、スレッド 0x2650 の 0x5dceccf5 でした。エラー コードは 0xc0000005 です。このエラーは、CLR のバグ、またはユーザー コードの安全でない部分または検証不可能な部分のバグである可能性があります。このバグの一般的な原因には、COM 相互運用機能または PInvoke のユーザー マーシャリング エラーが含まれ、スタックが破損する可能性があります。
Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
Type t = a.GetType("Tutorial.MyClass");
MethodInfo m = t.GetMethod("MyMethod");
MethodBody mb = m.GetMethodBody();
DynamicMethod dm = new DynamicMethod("MethodAlias", null, Type.EmptyTypes, typeof(Tutorial.MainWindow), true);
DynamicILInfo ilInfo = dm.GetDynamicILInfo();
SignatureHelper sig = SignatureHelper.GetLocalVarSigHelper();
ilInfo.SetLocalSignature(sig.GetSignature());
ilInfo.SetCode(mb.GetILAsByteArray(), mb.MaxStackSize);
try
{
dm.Invoke(this, null);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
ありがとうございました