包含未知类型的委托的结构

时间:2016-07-18 09:44:51

标签: c# delegates

我想要一个命令结构。它将包含命令的名称,以及指向调用该命令时要执行的函数的指针。

public struct Command {
        public string name;
        public delegate commandDelegate();
    }

这不起作用,因为委托没有类型。某些命令的函数将无效,而某些函数将返回一个值。他们的论点数也会有所不同。

我希望用这样的东西占据我的命令列表:

commands.Add(new Command { name = "exit", commandDelegate = new delegate void commandHelp(List<Command> commandList) });

这是我不理解的预期类型,因为我给它一个void类型,它匹配commandList方法的签名:

public static void commandHelp(List<Command> commandList) {
            Console.Write("\n");
            foreach (Command x in commandList) {
                Console.WriteLine("{0,-10}{1,-50}", x.name, "description");
            }          

显然,我不知道如何解决这个问题。如果可能的话,我希望这样做,因为我只是想学习一些C#语言功能。

1 个答案:

答案 0 :(得分:2)

您的Command定义应为:

public struct Command {
    public string name;
    public Delegate commandDelegate;
}

然后您可以将Command添加到您的列表中:

commands.Add(new Command { 
    name = "exit", 
    commandDelegate = new Action<List<Command>>(commandHelp) 
});

要执行委托,您可以将DynamicInvoke与参数一起使用,例如

commands[0].commandDelegate.DynamicInvoke(new List<Command> { });