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);
}

次のように、ラムダ経由でメソッドを渡すことができます。

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 に答える