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.

Другие вопросы по тегам