4

我有对象var channel = new Chanel(); 这个对象有几个我在函数内部调用的方法,如下所示:

private bool GetMethodExecution()
{
   var channel = new Channel();
   channel.method1();
   channel.method2();
}

类的所有方法都Channel派生自接口IChannel。我的问题是我如何调用方法GetMethodExecution()并传递我想要执行的方法,然后根据传递的参数在这个函数中执行它。

我需要的是调用 GetMethodExectution(IChannle.method1) 然后在这个函数内的对象上调用它。这可能吗

4

4 回答 4

4
private bool GetMethodExecution(Func<Channel, bool> channelExecutor)
{
   var channel = new Channel();
   return channelExecutor(channel);
}

现在您可以通过 lambda 传递方法,例如:

GetMethodExecution(ch => ch.method1());

GetMethodExecution(ch => ch.method2());
于 2013-03-14T12:39:19.880 回答
1

你在寻找这样的东西吗?

private bool GetMethodExecution(int method)
{
   switch (method)
   {
       case 1: return new Channel().method1();
       case 2: return new Channel().method2();
       default: throw new ArgumentOutOfRangeException("method");
   }
}
GetMethodExecution(1);
GetMethodExecution(2);
于 2013-03-14T12:40:34.887 回答
1

您可以使用Func Delegate执行以下操作:

private bool GetMethodExecution(Func<bool> Method)
{
    return Method()
}

public bool YourCallingMethod()
{
    var channel = new Channel();         
    return GetMethodExecution(channel.method1); // Or return GetMethodExecution(channel.method2);
}
于 2013-03-14T12:52:32.867 回答
0

如果要将方法名称作为参数传递并在代码块中调用它,可以使用反射,如下所示:

private bool GetMethodExecution(string methodName)
{
   var channel = new Channel();

   Type type = typeof(Channel);
   MethodInfo info = type.GetMethod(methodName);

   return (bool)info.Invoke(channel, null); // # Assuming the methods you call return bool
}      
于 2013-03-14T13:45:36.000 回答