6

是否可以在不使用手动编写的字符串的情况下获取同一类中另一个方法的名称?

class MyClass {

    private void doThis()
    {
        // Wanted something like this
        print(otherMethod.name.ToString());
    }   

    private void otherMethod()
    {

    }
}

您可能会问为什么:好吧,原因是我必须稍后像这个 Invoke("otherMethod") 那样调用该方法,但是我不想自己硬编码这个字符串,因为我不能再在项目中重构它了。

4

4 回答 4

8

一种方法是您可以将其包装到 delegateAction中,然后您可以访问方法的名称:

string name = new Action(otherMethod).Method.Name;
于 2013-08-04T05:55:33.217 回答
2

您可以使用反射(例如 - http://www.csharp-examples.net/get-method-names/)来获取方法名称。然后,您可以通过名称、参数甚至使用属性对其进行标记来查找您要查找的方法。

但真正的问题是——你确定这是你需要的吗?这看起来好像你真的不需要反思,但需要考虑你的设计。如果您已经知道要调用什么方法,为什么还需要名称?使用委托怎么样?或者通过接口公开方法并存储对实现它的某个类的引用?

于 2013-08-04T05:57:17.780 回答
1

尝试这个:

MethodInfo method = this.GetType().GetMethod("otherMethod");
object result = method.Invoke(this, new object[] { });
于 2013-08-04T05:58:06.763 回答
0

顺便提一句。我还发现(在互联网的扩展中)仅获取方法字符串的替代解决方案。它也适用于参数和返回类型:

System.Func<float, string> sysFunc = this.MyFunction;
string s = sysFunc.Method.Name; // prints "MyFunction"

public string MyFunction(float number)
{
    return "hello world";
}
于 2013-08-26T19:50:47.753 回答