繁体   English   中英

创建函数以将命令添加到自定义程序

[英]Create function to add commands to custom program

我以前有其他编程语言的经验,但是我决定尝试使用某些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;
}

我认为您正在寻找Action<T>Function<T,Result> 请参考此帖子以获取示例用法,并在此处获取MSDN文档(特定的MSDN链接提供了大量示例)。

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

您要的是所谓的命令模式

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

看看这个简单的C#实现以及这个不错的教程

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

Action表示一个无效方法调用,而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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM