是否可以使用手动编写的字符串获取同一类中另一个方法的名称,但没有?
class MyClass {
private void doThis()
{
// Wanted something like this
print(otherMethod.name.ToString());
}
private void otherMethod()
{
}
}
你可能会问为什么:原因是我必须稍后调用这个方法,比如这个Invoke(“otherMethod”),但是我不想自己硬编码这个字符串,因为我无法在其中重构它项目
答案 0 :(得分:8)
一种方法是将其包装到委托Action
中,然后您可以访问方法的名称:
string name = new Action(otherMethod).Method.Name;
答案 1 :(得分:2)
您可以使用反射(示例 - http://www.csharp-examples.net/get-method-names/)来获取方法名称。然后,您可以按名称,参数查找要查找的方法,甚至可以使用属性对其进行标记。
但真正的问题是 - 你确定这是你需要的吗?这看起来好像你不需要反思,但需要考虑你的设计。如果您已经知道要调用的方法,为什么需要这个名字?使用代表怎么样?或者通过接口公开方法并存储对实现它的某个类的引用?
答案 2 :(得分:1)
试试这个:
MethodInfo method = this.GetType().GetMethod("otherMethod");
object result = method.Invoke(this, new object[] { });
答案 3 :(得分:0)
顺便说一下。我还发现(在互联网的扩展中)另一种解决方案,只获取方法的字符串。它也适用于参数和返回类型:
System.Func<float, string> sysFunc = this.MyFunction;
string s = sysFunc.Method.Name; // prints "MyFunction"
public string MyFunction(float number)
{
return "hello world";
}