0

私は次のようなものが欲しいです:

 AStaticClass.MakeCall(commonCmds => commonCmds.MethodOfAParticularClass)

したがって、ラムダ式を引数として使用し、デリゲートに、ラムダ関数を使用してインテリセンスを介してアクセスできる特定のクラスの使用可能なメソッドのセットをリストさせたいと思います。次に、渡されたメソッドを呼び出します。

すなわちcommonCmds => commonCmds. {Lists all the methods of a particular class}

次に、その呼び出しを行うメソッドが必要です。

適切なメソッドシグネチャを理解できません。

これまでのところ、私はパブリックボイドを持っていますこれはMakeCall(Action cmd) {cmd.invoke;}明らかに機能しません。func、Expressionを試しましたが、理解できません。

助けてくれてありがとう!

編集:

CmdsTwoおよびCmdsOneは静的にすることができます。ただし、この方法でクラスを増やしたいと思います。これにより、他の作業がはるかに簡単になります。

public void Main(string []args) {
    MyStaticClass.MakeCall(x => x.DoThis);

    MyStaticClass.MakeCallTwo(x => x.DoThisTwo);

    MyStaticClass.MakeCall(x => x.DoThisThree);
}

public static class MyStaticClass{
    public static void MakeCall<???>( ??????)

    public static void MakeCallTwo<???>( ??????)
}

public class Cmds{
    public void DoThis();

    public void DoThisThree();
}

public class CmdsTwo{
    public void DoThisTwo();
}

}

4

4 に答える 4

0

私が今考えることができる最も近いものはこれです:

commonCmds => commonCmds.GetType().GetMethods()

MethodInfoこれにより、の型のすべてのメソッドを記述するの配列が返されますcommonCmds。次のようなもののいずれかを呼び出す必要があります。

object result = someMethodInfo.Invoke(someObjectInstance, new object[] { someParameter });
于 2012-05-24T07:20:21.697 に答える
0

確認できます

AStaticClass.MakeCall( () => commonCmds.MethodOfAParticularClass)
于 2012-05-24T07:23:24.773 に答える
0

Action WithATypeの汎用バージョンを使用する必要があります。

public void MakeCall(Action<TYPE_HERE> cmd) 
{
   cmd.Invoke(...);
}

タイプが推測され、インテリセンスが開始されます。

于 2012-05-24T07:29:49.303 に答える
0

だから私はそれを手に入れました。拡張メソッドを使用しました。ありがとうございました。

 public static class MyStaticClass{
     public static void MakeCall(Action<Cmds> paramater){
           Helper(new Cmds(), parameter);
      }

      private static void Helper(this Cmds, Action<Cmds> invokeThis) {...}

     public static void MakeCallTwo<???>( ??????)
 }
于 2012-05-24T15:33:07.000 に答える