从c#中的字符串调用类对象的函数[复制]

问题描述 投票:0回答:1

这个问题在这里已有答案:

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

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

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

关键是通过param调用类对象函数而不使用分支或数据结构映射。

也许使用反思..任何好主意?

c# .net string reflection function-call
1个回答
1
投票

是的,可以通过反思来实现。您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.