2014-03-26 42 views
0

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

研究“代表”和“lambda表达式” –

+0

我编辑了您的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

回答

0

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

Action表示void方法调用,而Func表示返回类型TResult的委托。这两个类都有重载,可以接受任意数量的参数。

在你的榜样,你addCommand签名看起来像:

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

或通过传递方法组:

public void addCommand(string command, Action action); 

然后,您可以使用lambda表达式叫它

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

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

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

本质上用Action<T>可以调用一个使用lambda表达式的方法,并将Action<T>作为另一个函数的参数(即将函数作为参数提交)。有一些使用C#代码关键字的标准方法,但它是传统功能。如果您正在寻找相当于一个实际函数指针,那么C#不直接提供该构造(它通过委托关键字是间接的)。希望这可以帮助!

0

什么你问的是被称为Command Pattern

在面向对象的程序设计,命令模式是其中一个对象被用来代表和封装所需的所有信息的行为设计模式稍后调用方法。这些信息包括方法名称,拥有方法的对象和方法参数的值。

结账this simple C# implementation还有this nice tutorial

相关问题