Возможно ли в C # вызывать метод (нестатический) без создания экземпляра его класса, например:
public class MyClass
{
public void MyMethod()
{
Console.WriteLine("method called");
}
}
Я пробовал этот метод с использованием пространства имен System.Reflection.Emit, я скопировалIL MyMethod () для динамического метода, но получил исключение:
FatalExecutionEngineError: Обнаружена фатальная ошибка времени выполнения.Адрес ошибки был 0x5dceccf5 в потоке 0x2650.Код ошибки 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());
}
Спасибо