Как получить имя метода из известного метода?
Можно ли получить имя другого метода в том же классе, но без использования строки, написанной вручную?
class MyClass {
private void doThis()
{
// Wanted something like this
print(otherMethod.name.ToString());
}
private void otherMethod()
{
}
}
Вы можете спросить, почему: хорошо, причина в том, что я должен вызывать метод позже, как этот Invoke("otherMethod"), однако я не хочу сам жестко кодировать эту строку, так как больше не могу ее реорганизовать в проекте.
4 ответа
Одним из подходов является то, что вы можете заключить его в делегат Action
, тогда вы можете получить доступ к названию метода:
string name = new Action(otherMethod).Method.Name;
Вы можете использовать рефлексию (пример - http://www.csharp-examples.net/get-method-names/), чтобы получить имена методов. Затем вы можете найти метод, который вы ищете, по имени, параметрам или даже использовать атрибут, чтобы пометить его.
Но реальный вопрос - ты уверен, что это то, что тебе нужно? Это выглядит так, как будто вы не нуждаетесь в рефлексии, но должны продумать свой дизайн. Если вы уже знаете, какой метод вы собираетесь использовать, зачем вам имя? Как насчет использования делегата? Или разоблачение метода через интерфейс и сохранение ссылки на некоторый класс, реализующий его?
Попробуй это:
MethodInfo method = this.GetType().GetMethod("otherMethod");
object result = method.Invoke(this, new object[] { });
Btw. Я также нашел (в расширениях Интернета) альтернативное решение только для получения строки метода. Он также работает с параметрами и типами возвращаемых данных:
System.Func<float, string> sysFunc = this.MyFunction;
string s = sysFunc.Method.Name; // prints "MyFunction"
public string MyFunction(float number)
{
return "hello world";
}