Возможно ли в 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());
}
Спасибо
public static void MyMethod()
это не нестатично. и NO нельзя вызывать нестатический метод без создания экземпляра. - person Bala R   schedule 17.06.2011MyMethod
статичным? - person Sven   schedule 17.06.2011