[英]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#公开了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.