0

我想要类似的东西:

 AStaticClass.MakeCall(commonCmds => commonCmds.MethodOfAParticularClass)

所以我想要一个 lambda 表达式作为参数,并让委托列出特定类的可用方法集,我可以使用 lambda 函数通过智能感知访问这些方法。然后调用传入的方法。

IEcommonCmds => commonCmds. {Lists all the methods of a particular class}

然后我想要一个方法来调用。

我无法弄清楚正确的方法签名。

到目前为止,我有 public voidMakeCall(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

The closest i can think of right now is this:

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

This returns you an array of MethodInfo, which describe all methods of the type of commonCmds. You'd have to invoke one of those like this:

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

所以我明白了。我使用了扩展方法。谢谢你。

 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 回答
0

您需要使用 Action With A Type 的通用版本。

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

类型被推断出来,智能感知应该开始了。

于 2012-05-24T07:29:49.303 回答