Пятница, 26 Апреля 2024, 12:25

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Программирование .NET » Делегаты (как понять делегаты?)
Делегаты
KiraДата: Вторник, 20 Ноября 2012, 16:58 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Объясните мне делегаты, что не понимаю хотя и прочетал уже не мало. Ссылка на фукцию, но зачем ? что это даст ?
И еще что за оператор => : MathAction ma3 = s=> s * s * s;? что оно делает?


Для чего он делегат так и непонятно, кроме того что указатель на ф-ю. Мне еще с++ было трудно понять указатели.


Unity3d разработчик на С#. Лучшее спасибо + в репу.
"Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
"Человек, который никогда не ошибался никогда не пробовал ничего нового".
"Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн


Сообщение отредактировал Kira - Вторник, 20 Ноября 2012, 17:00
TimДата: Вторник, 20 Ноября 2012, 17:21 | Сообщение # 2
был не раз
Сейчас нет на сайте
При помощи delegate объявляется сигнатура функции. Чтобы можно было принимать функции в качестве аргументов и возвращать их из других функций.
Сам на C# не пишу, но концепция делегатов в знакомых мне языках (в частности, в D) заключается именно в этом.
Делегаты активно используются при программировании в функциональном стиле. К нему же относится и оператор =>, который используется для объявления лямбда-выражения (MathAction ma3 = s => s * s * s;) Если "на пальцах", то лямбда - это просто маленькая функция, объявленная в виде локальной переменной. Ее, как я уже писал выше, можно передавать в другие функции и возвращать из них.
Кстати, знаю: в C# принято говорить "методы", а не "функции", но мне так привычнее)

По основным идиомам функционального стиля рекомендую статью на RSDN:
http://www.rsdn.ru/article/funcprog/fp.xml


Сообщение отредактировал Tim - Вторник, 20 Ноября 2012, 17:47
МаркерДата: Вторник, 20 Ноября 2012, 18:07 | Сообщение # 3
Я таки выше этого
Сейчас нет на сайте
Quote (Kira)
как понять делегаты?

Ну, эта, типа, чувачки такие в этой, делегации.



Я не понял смысл твоего поста, поэтому он автоматически может считаться оффтопом.
Андрей, 14 лет
Если ты ничего не понимаешь в игрострое, то тебе нечего делать на курсах программистов.
Андрей, 14 лет
TreinDSMДата: Вторник, 20 Ноября 2012, 20:17 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Tim правильно объяснил.
Делегат это объект, который ссылается на некоторый метод.
Где это может использовать? Ну например для событийной модели. Т.е. при использовании делегата можно повесить метод с определенной сигнатурой на некоторое событие.
divol13Дата: Вторник, 20 Ноября 2012, 20:39 | Сообщение # 5
участник
Сейчас нет на сайте
delegate это, по простому, указатель на функцию

UndeadДата: Вторник, 20 Ноября 2012, 21:37 | Сообщение # 6
NeoAxis User
Сейчас нет на сайте
Здесь смотреть не пробовал http://msdn.microsoft.com/ru-ru/library/vstudio/ms173171

Вcем зла.
KiraДата: Вторник, 20 Ноября 2012, 22:16 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
MathAction ma3 = s => s * s * s;
То есть в данном случае получается что:
int s(int s)
{
return s*s*s;
}
MathAction ma3 = s;

Добавлено (20.11.2012, 22:16)
---------------------------------------------

Quote (divol13)
delegate это, по простому, указатель на функцию

Очень интересно, и просто. Особенно если не читать 1 пост.
Quote (Undead)
Здесь смотреть не пробовал

Некоторое из этого читал но не весь список, посмотрим.
Quote (Tim)
По основным идиомам функционального стиля рекомендую статью на RSDN:
http://www.rsdn.ru/article/funcprog/fp.xml

Очень интересно, теперь хоть знаю что мне нужно. Главное понятно хоть и со 2 раза.
Зы: Платон очень интересный человек был, жаль что у меня не было такого учителя.


Unity3d разработчик на С#. Лучшее спасибо + в репу.
"Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
"Человек, который никогда не ошибался никогда не пробовал ничего нового".
"Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
divol13Дата: Вторник, 20 Ноября 2012, 23:35 | Сообщение # 8
участник
Сейчас нет на сайте
Quote

Очень интересно, и просто. Особенно если не читать 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)

как-то так...


KiraДата: Вторник, 20 Ноября 2012, 23:52 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
Quote (Kira)
Особенно если не читать 1 пост.

Quote (divol13)
а что если ты хочешь иметь в классе функцию

Вот этого а что мне было и не понять. Внимательно если посмотреть, я знаю как это работает. Я не знаю/л зачем мне это нужно. Теперь вот стал понимать. Да и гораздо больше и интересней чем просто делегаты.


Unity3d разработчик на С#. Лучшее спасибо + в репу.
"Безумие: делать одно и то же снова и снова, и ждать при этом разных результатов".
"Человек, который никогда не ошибался никогда не пробовал ничего нового".
"Если человек может спокойно управлять автомобилем во время поцелуя красивой девушки, значит он уделяет поцелую недостаточно внимания”. Альберт Эйнштейн
Форум игроделов » Программирование » Программирование .NET » Делегаты (как понять делегаты?)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг