Я программирую на многих языках: Java
, PHP
, C#
, JQuery
и это лишь некоторые из них, но я всего лишь средний уровень в C# и не понимаю, как использовать анонимные функции. Я видел многочисленные ссылки на Action<T>
, lambda
и delegates
, но я не уверен, что это такое и какое значение они имеют:
Я (однако) довольно привык к JQuery, который делает это так:
function hello(fnc){
console.log("Hello");
if (typeof fnc === "function") fnc();
}
hello(); //prints "Hello"
hello(function () {console.log("World"); }); //prints "Hello\nWorld"
Теперь я использую это в качестве примера: как я могу сделать это C#
, и мне любопытно, что происходит с classes
EG:
class foo
{
public void action()
{
Debug.WriteLine("Hello");
}
public void action(Delegate fnc)
{
action();
control.Invoke((MethodInvoker)fnc);
}
}
foo FOO = new foo();
FOO.action(); //prints "Hello"
FOO.action(() => { //prints "Hello\nWorld"
Debug.WriteLine("World");
});
поэтому мои вопросы: а) работает ли это / я закрыт (я не могу проверить, что я не на рабочем ПК, банкомат) и б) как насчет передачи параметра (т.е. вопрос о области):
foo FOO = new foo();
string yay = "Yeah";
FOO.action(() => { //prints "Hello\nWorldYeah"
Debug.WriteLine("World" + yay);
});
РЕДАКТИРОВАТЬ
pseudocode
, является довольно странным способом быть наказанным, но я вижу, что ты явно расстроен из-за этого. - person user26676   schedule 19.07.2014a) does this work / am I close
. Вы должны знать, работает ли код, который вы публикуете на SO. Вы должны были попытаться заставить это работать, и вы должны быть в состоянии объяснить, что вы пытались, но не сработало. Вот такая у меня проблема с вашим постом. - person eddie_cat   schedule 19.07.2014control.Invoke
штука). Я бы использовалAction
в качестве параметра вместоDelegate
. Ваш вопрос о масштабе выглядит хорошо. Что именно вы спрашиваете? - person BradleyDotNET   schedule 19.07.2014