2016-06-08 4 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); 

Позвольте мне знать, если у вас есть любые вопросы

Смежные вопросы