C# вызывает публичный нестатический метод, используя отражение без создания экземпляра его класса
Возможно ли в 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());
}
Спасибо
1 ответ
Не то, что я знаю из. Потому что это не статично.
Я бы просто сказал "Нет", но мой ответ не был достаточно длинным для SO.