Объясните мне делегаты, что не понимаю хотя и прочетал уже не мало. Ссылка на фукцию, но зачем ? что это даст ? И еще что за оператор => : MathAction ma3 = s=> s * s * s;? что оно делает?
class DelegateTest { // Regular method that matches signature: static double Double(double input) { return input * 2; }
static void Main() { // Instantiate delegate with named method: MathAction ma = Double;
// Invoke delegate ma: double multByTwo = ma(4.5);// Что здесь такого особенного? Console.WriteLine("multByTwo: {0}", multByTwo);
// Instantiate delegate with anonymous method: MathAction ma2 = delegate(double input)// можно понять что делегат это имя ф-ции с параметром. Но во внутрь можно положить что угодно. { return input * input; };
Для чего он делегат так и непонятно, кроме того что указатель на ф-ю. Мне еще с++ было трудно понять указатели. Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Сообщение отредактировал Kira - Вторник, 20 Ноября 2012, 17:00
При помощи delegate объявляется сигнатура функции. Чтобы можно было принимать функции в качестве аргументов и возвращать их из других функций. Сам на C# не пишу, но концепция делегатов в знакомых мне языках (в частности, в D) заключается именно в этом. Делегаты активно используются при программировании в функциональном стиле. К нему же относится и оператор =>, который используется для объявления лямбда-выражения (MathAction ma3 = s => s * s * s;) Если "на пальцах", то лямбда - это просто маленькая функция, объявленная в виде локальной переменной. Ее, как я уже писал выше, можно передавать в другие функции и возвращать из них. Кстати, знаю: в C# принято говорить "методы", а не "функции", но мне так привычнее)
Ну, эта, типа, чувачки такие в этой, делегации. Я не понял смысл твоего поста, поэтому он автоматически может считаться оффтопом. Андрей, 14 лет Если ты ничего не понимаешь в игрострое, то тебе нечего делать на курсах программистов. Андрей, 14 лет
Tim правильно объяснил. Делегат это объект, который ссылается на некоторый метод. Где это может использовать? Ну например для событийной модели. Т.е. при использовании делегата можно повесить метод с определенной сигнатурой на некоторое событие.
Очень интересно, и просто. Особенно если не читать 1 пост.
Quote (Undead)
Здесь смотреть не пробовал
Некоторое из этого читал но не весь список, посмотрим.
Quote (Tim)
По основным идиомам функционального стиля рекомендую статью на RSDN: http://www.rsdn.ru/article/funcprog/fp.xml
Очень интересно, теперь хоть знаю что мне нужно. Главное понятно хоть и со 2 раза. Зы: Платон очень интересный человек был, жаль что у меня не было такого учителя. Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Очень интересно, и просто. Особенно если не читать 1 пост.
но это действительно простые вещи и их объясняют так же просто.
хорошо, еще раз на пальцах. вот смотри, у тебя в классе есть поля или параметры(называют по разному) ты им можешь присвоить значение допустим int a = 5; float b = 0.7; string t = "bla-bla-bla"; и ты в процессе выполнения программы их можешь менять или они сами меняются, по сути не важно как, главное изменяются. тут надеюсь понятно?
тогда дальше. а что если ты хочешь иметь в классе функцию тогда по аналогии с типами, что были выше, напишем следующее delegate myFunction; объявили, и теперь можем проинициализировать эту переменную любой функцией например так myFunction = add2vars; которая складывает две переменных и вызвать уже делегат проинициализированный этой функцией myFunction(5,6); если на следующем шаге ты хочешь перемножать два числа, то проинициализируй делегат другой функцией myFunction = mul2vars; и теперь вызывая делегат получим умножение параметров myFunction(5,6)
Вот этого а что мне было и не понять. Внимательно если посмотреть, я знаю как это работает. Я не знаю/л зачем мне это нужно. Теперь вот стал понимать. Да и гораздо больше и интересней чем просто делегаты. Unity3d разработчик на С#. Лучшее спасибо + в репу. "Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов". "Человек, который никогда не ошибался никогда не пробовал ничего нового". "Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн