Использование анонимной функции с несколькими параметрами
Пример сценария.
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.
2 ответа
Решение
Вы можете использовать дженерики и встроенные делегаты:
public void FuncWithCallback(int param, int param2, Action<int, int> callback)
Func - это делегат, который может принимать параметры и что-то возвращать. Действие возвращает void и может принимать параметры. Вы также можете объявить свои собственные типы делегатов, если вы хотите иметь более явное именование.
// 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);
Вот способ, которым вы можете использовать функцию обратного вызова в 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 );
Дайте знать, если у вас появятся вопросы