簡體   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