Как получить имя метода из известного метода?

Можно ли получить имя другого метода в том же классе, но без использования строки, написанной вручную?

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";
}
Другие вопросы по тегам