如何从已知方法中获取方法名

本文关键字:方法 获取 | 更新日期: 2023-09-27 18:26:26

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

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

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

如何从已知方法中获取方法名

一种方法是将其封装到委托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";
}