Я пытался вызвать метод по имени, но проблема в том, что метод, который я вызываю, не может быть статическим, и он должен быть текущего класса.
Я пробовал способ сделать этокак это:
public static void InvokeMenuMethod(string methodName, object sender, EventArgs e)
Type calledType = Type.GetType("MyNamespace.MyClass");
calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
null,
null,
new object[] { sender, e }
);
}
Это, очевидно, работает только для статических членов, поэтому я попробовал что-то вроде этого
public static void InvokeMenuMethod(string methodName, object sender, EventArgs e)
Type calledType = Type.GetType("this");
calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public,
null,
null,
new object[] { sender, e }
);
}
Но я получаю Must specify binding flags describing the invoke operation required (BindingFlags.InvokeMethod CreateInstance GetField SetField GetProperty SetProperty).
Parameter name: bindingFlags
ошибку ...
Итак, как я могу это сделать?
РЕДАКТИРОВАТЬ:
Итак:
public void InvokeMenuMethod(string methodName, object sender, EventArgs e) {
Type.GetType("this").InvokeMember(
methodName,
BindingFlags.InvokeMethod,
null,
this,
new object[] { sender, e }
);
}
Дает NullReferenceException
Решение: Нет "this" в Type.GetType("this")