首页 > 解决方案 > 从C#中的字符串调用类对象的函数

问题描述

如果某些方法有字符串参数,我正在使用 WPF mvvm 模式,这可能是这样的调用

SomeClass1 sc  = new SomeClass();
DummyClass2 dc = new DummyClass2();

public void SomeMethod(string param) //param = "SomeMethodName"
{ 
    sc.'param'(dc);
}

关键是通过没有分支或数据结构映射的参数调用类对象的功能。

也许使用反射..有什么好主意吗?

标签: c#.netstringreflectionfunction-call

解决方案


是的,这可以通过反射来实现。您可以使用该Invoke方法。

它看起来像这样:

MethodInfo method = type.GetMethod(name); object result = method.Invoke(objectToCallTheMethodOn);

话虽如此,在正常情况下,您不应该使用反射来调用 c# 中的方法。它仅适用于非常特殊的情况。


这是一个完整的例子:

class A 
{
    public int MyMethod(string name) {
        Console.WriteLine( $"Hi {name}!" );
        return 7;
    }
}



public static void Main()
{
    var a = new A();
    var ret = CallByName(a, "MyMethod", new object[] { "Taekyung Lee" } );
    Console.WriteLine(ret);
}

private static object CallByName(A a, string name, object[] paramsToPass )
{
    //Search public methods
    MethodInfo method = a.GetType().GetMethod(name);
    if( method == null )
    {
        throw new Exception($"Method {name} not found on type {a.GetType()}, is the method public?");
    }
    object result = method.Invoke(a, paramsToPass);
    return result;
}

这打印:

Hi Taekyung Lee!
7

推荐阅读