Я запутался в необязательных анонимных функциях в С#

Я программирую на многих языках: 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); 
});

РЕДАКТИРОВАТЬ

снимок экрана с ошибкой


person user26676    schedule 18.07.2014    source источник
comment
@eddie_cat не уверен, что ты имеешь в виду? Вы спрашиваете, почему я написал сложный псевдокод? Если да, то я уделяю ему внимание и заботу, потому что хочу знать, как его сформировать. Хороший ответ   -  person user26676    schedule 19.07.2014
comment
Я думаю, что вы зашли не на тот веб-сайт, Эдди, спасибо за ваши ответы, они ценны, но я хочу, чтобы этот вопрос получил реальные ответы, у вас был плохой день? Я удосужился попробовать, я потратил несколько часов, пытаясь сделать это в любом случае... каким образом это показывает отсутствие исследований в ваших глазах?   -  person user26676    schedule 19.07.2014
comment
Нисколько. Я просто говорю вам, почему я поставил вам -1. Что вы и спросили.   -  person eddie_cat    schedule 19.07.2014
comment
вы поставили мне -1, потому что вы думаете, что я не показал достаточно реальных исследований? Это действительно справедливо? Я (лично) думаю, что этот вопрос на самом деле хорошо сформирован (на основе плохих примеров в Интернете, если я погуглил)   -  person user26676    schedule 19.07.2014
comment
Конечно, он хорошо сформирован. Но это не очень хороший вопрос для SO. На самом деле вы утверждаете, что не пробовали экспериментировать с этим самостоятельно, прежде чем спросить здесь. И есть много учебных пособий, доступных на эту тему. Я не говорю, что вы не можете задать вопрос о чем-то, если у вас возникнут проблемы; Я говорю, что, похоже, у вас еще не было возможности столкнуться с проблемами.   -  person eddie_cat    schedule 19.07.2014
comment
-1 и здесь. В какой-то момент я не понимал лямбда-выражений, поэтому я знаю из первых рук, что есть множество хороших руководств/ответов SO/и т. д. по этому вопросу. Также я полностью согласен с @eddie_cat. Подождите, пока вы не сможете добраться до компьютера, чтобы проверить его, прежде чем спрашивать.   -  person Neil Smith    schedule 19.07.2014
comment
Я вошел в удаленную сессию и запустил ее. Должен сказать, то, что я предоставляю подробную информацию pseudocode, является довольно странным способом быть наказанным, но я вижу, что ты явно расстроен из-за этого.   -  person user26676    schedule 19.07.2014
comment
@eddie_cat, пожалуйста, помогите показать, где я сказал, что не пробовал? Я сказал, что не могу проверить это в данный момент, есть много различий, просто одно не исключает другого. Я думаю, возможно, вы слишком много на себя взяли и разозлились из-за того, что не так ~Smith.h.Neil Я не согласен с тем, что есть хорошие примеры, есть примеры, но все они недостаточно ясны для меня ( на основе 30 или 40 образов, включая SO)   -  person user26676    schedule 19.07.2014
comment
Я не злюсь. Моя проблема с вашим исходным сообщением заключается в том, что вы спросили a) does this work / am I close. Вы должны знать, работает ли код, который вы публикуете на SO. Вы должны были попытаться заставить это работать, и вы должны быть в состоянии объяснить, что вы пытались, но не сработало. Вот такая у меня проблема с вашим постом.   -  person eddie_cat    schedule 19.07.2014
comment
Итак, вы согласились с тем, что я на самом деле не говорил, что не пробовал, и вы злитесь просто на псевдокод. Я смотрю здесь много ascii, но ни один из них не отвечает на законный вопрос, который у меня все еще есть. Эта болтовня только помешала мне получить помощь, и поэтому я не уверен, что вы хотели это сделать, но это то, что произошло.   -  person user26676    schedule 19.07.2014
comment
но я не уверен, что это такое и какое значение они имеют - Буквально первый связанный вопрос. Это должно заставить вас начать.   -  person Neil Smith    schedule 19.07.2014
comment
@Smith.h.Neil, у него нет кода, извините, что придерживаюсь своего мнения по этому поводу, но вы оба совершенно неправы, что так сильно ругаете этот вопрос.   -  person user26676    schedule 19.07.2014
comment
Я сказал, что это поможет вам начать. Не дать вам точный код, который вам нужен.   -  person Neil Smith    schedule 19.07.2014
comment
@Smith.h.Neil Я уже прочитал это   -  person user26676    schedule 19.07.2014
comment
Вас никто не ругает. И я уже сказал, что не сержусь. Я сказал, что вы не пытались проверить это, что вы доказали, когда спросили, работает ли это в качестве вашего первого вопроса. Вы должны знать, работает ли это. Вы бы знали, если бы попытались. И я не буду снова повторять свою точку зрения, потому что вы меня не слушаете. Удачи тебе.   -  person eddie_cat    schedule 19.07.2014
comment
На самом деле у меня нет проблем с вопросом, но я не понимаю, о чем вы спрашиваете. Да, у вас в основном есть правильное представление (хотя я понятия не имею, о чем эта control.Invoke штука). Я бы использовал Action в качестве параметра вместо Delegate. Ваш вопрос о масштабе выглядит хорошо. Что именно вы спрашиваете?   -  person BradleyDotNET    schedule 19.07.2014
comment
Вы должны включить в вопрос текст сообщений об ошибках, сгенерированных в вашем коде, а не просто сфотографировать редактор, отображающий сообщение об ошибке.   -  person Servy    schedule 21.07.2014


Ответы (1)


несмотря на отсутствие помощи со стороны самоназначенной полиции SO (которые остаются неправы и которые скорее будут наказывать за вопросы, требующие ответов, чем давать ответы), я исправил это сам, без их помощи.. так что для потомков вот как это сделать

class foo
{
    public void action()
    {
        Debug.WriteLine("Hello");
    }

    public void action(Action fnc)
    {
        action();
        fnc();
    }
}

и назвать это

foo FOO = new foo();
FOO.action();                         //prints "Hello"
FOO.action((Action)(() =>
{                                     //prints "Hello\nWorld"
    Debug.WriteLine("World");
}));

string yay = "Yeah";
FOO.action((Action)(() =>
{                    //prints "Hello\nWorldYeah" - this will indeed still print "Yeah"
    Debug.WriteLine("World" + yay);
}));

используя эту технику, вы можете отправлять анонимные функции обратного вызова в методы С#

person user26676    schedule 21.07.2014
comment
если бы вы разместили ответ, у вас могло бы быть время и место, чтобы сказать это - person user26676; 22.07.2014
comment
Я также могу сказать это в комментарии без необходимости публиковать ответ, потому что это не ответ на вопрос, вы просто добавляете ненужный код из кода в вопросе к своему ответу без какой-либо продуктивной причины. На самом деле, поскольку проблема даже не в вопросе, это не место в ответе. Поскольку проблема связана исключительно с вашим ответом, он относится к вашему ответу как комментарий. - person Servy; 22.07.2014