2016-06-08 76 views
0

腳本示例。使用具有幾個參數的匿名函數

function TakeCallback(param, param2, callback) { 
    var a = param; 
    var b = param2; 
    callback(a, b); 
} 

.... some context ... 
TakeCallback("A", "B", function(one, two) { 
    var scopeA = one; 
    var scopeB = two; 
}); 

在C#

public void FuncWithCallback(int param, int param2, Func callback) 
{ 
    int myScope = param; 
    int myScope2 = param2; 

    callback(myScope, myScope2); 
} 

.... some context .... 

. 
. 
    FuncWithCallBack(10, 100, (x, y) => { 
     int AnotherScope = x; 
     int AnotherScope2 = y; 
    }); 
. 
. 

問題

我的問題很簡單。我如何在C#中使用回調函數,就像腳本一樣?更準確地說,在第三個參數

public void FuncWithCallback(int param, int param2, Func callback) 

這樣做的正確語法是這樣嗎?

public void FuncWithCallback(int param, int param2, Func(x, y) callback) 
// beep! error! 

如果有幾種選擇,請儘可能多地告訴我。我準備學習:D。

回答

6

您可以使用泛型和內置代表:

public void FuncWithCallback(int param, int param2, Action<int, int> callback) 

Func是可以帶參數和返回的東西委託。 Action返回void並可以接受參數。如果您想要更明確的命名,您還可以聲明自己的delegate類型。

// Action 
delegate void MyDelegate(); 

// Action<int, int> 
delegate void MyDelegate2(int param1, int param2); 

// Func<string> 
delegate string MyDelegate3(); 

// Func<int, int, string> 
delegate string MyDelegate4(int param1, int param2); 
0

這裏是您可以在其中使用回撥功能在C#的方式

選項1

public static void FunctionWithCallBack(string a, string b, Func<string,string,string> callBackFunc) 
    { 
     string firstArg = a; 
     string secondArg = b; 
     var result = callBackFunc(firstArg, secondArg); 
    } 

    public static string CallBackFunctionMethod(string a, string b) 
    { 
     return a + " " + b; 
    } 
CallBackFunction.FunctionWithCallBack("Aslam", "Shaikh", CallBackFunction.CallBackFunctionMethod); 

選項2

CallBackFunction.FunctionWithCallBack("Aslam", "Shaikh", (x, y) => x + " " + y); 

讓我知道你是否有任何問題