【问题标题】:Create function to add commands to custom program创建函数以将命令添加到自定义程序
【发布时间】:2014-03-26 02:12:08
【问题描述】:

我以前有其他编程语言的经验,但我决定尝试使用一些 C#。我一直在尝试找到一种方法来创建一个函数,该函数允许我为命令创建其他函数

例子:

addCommand("help", public PrintHelp(){ Console.WriteLine("blah blah blah"); });

我只是不确定如何创建函数,以便它接受另一个函数作为参数,然后可以再次调用。

或者我希望能够创建一个可以保存这样的函数的对象:

Command Help = new Command;
Help.Function = public void printHelp() { Console.WriteLine("blah blah blah"); };
Help.Command = "help";

第二个实际上是理想的。我只尝试了第一种方法,方法如下:

public void AddCommand(string Command, delegate function){
  cmd = Command;
  FUNC = function;
}

【问题讨论】:

标签: c# function object


【解决方案1】:

C# 公开了 Action<T ... Tn>Func<T ... Tn, TResult> 类型,用于将函数作为参数传递。

Action 代表一个 void 方法调用,而 Func 代表一个返回类型 TResult 的委托。这两个类都具有采用任意数量参数的重载。

在您的示例中,您的 addCommand 签名如下所示:

public void addCommand(string command, Action action);

然后您可以使用 lambda 表达式调用它:

addComand("help", () => { Console.WriteLine("blah blah blah") } );

或者通过传入一个方法组:

public void printHelp()
{
  Console.WriteLine( "blah blah blah" );
}

// In calling code:
addCommand("help", printHelp);

【讨论】:

    【解决方案2】:

    我认为您正在寻找Action<T>Function<T,Result>。请参考this post 示例用法和here MSDN 文档(特定的MSDN 链接提供了大量示例)。

    基本上使用Action<T>,您可以使用lambda 表达式调用方法并将Action<T> 作为参数传递给另一个函数(即,将函数作为参数传递)。使用委托关键字使用 C# 执行此操作有标准方法,但它是遗留功能。如果您正在寻找一个真正的函数指针的等价物,那么 C# 不会直接提供该构造(它是通过委托关键字间接提供的)。希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      您所要求的是Command Pattern

      在面向对象的编程中,命令模式是一种行为设计模式,其中对象用于表示和封装以后调用方法所需的所有信息。此信息包括方法名称、拥有该方法的对象以及方法参数的值。

      查看this simple C# implementationthis nice tutorial

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        • 2019-02-02
        • 2010-10-31
        • 2021-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多