|
|
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВDaniilSeryiКусок кода на Хаскеле можно? Можно, быстрая сортировка например. Код: c# 1. 2. какая гадость... Как это расшифровывается-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 11:25 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
DaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты? deligate по Паскалю - это список обратных вызовов(Callback). Ключевое слово - список. В Паскале подписаться на событие(например OnCreate) может только один подписчик, присвоив Код: pascal 1. 2. 3. В C# подписаться на аналогичное событие может сразу несколько подписчиков. Причём выполнятся они будут последовательно. Более того - в C# делигату можно сказать, что бы он выполнил список процедур асинхронно(.Invoke). А в переводе на Паскаль это выглядело бы примерно так: Код: pascal 1. 2. 3. 4. 5. DaniilSeryiСмотрю на синтаксис C# - так тошно, что хочется бл%€$ть. В принципе - ДА :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 11:32 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
DaniilSeryiКак это расшифровывается-то? А это не нужно расшифровывать, это изложение алгоритма практически литературным языком, в том и прелесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 11:37 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
DaniilSeryiЕвгенийВпропущено... Можно, быстрая сортировка например. Код: c# 1. 2. какая гадость... Как это расшифровывается-то? Че не понятного то? 1. Для пустого писка - результат пустой список. 2. Для не пустого, склеиваем рекурсивно отсортированные все элементы меньше головы + голова + все элементы рекурсивно отсортированные больше головы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 11:42 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Valery_BDaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты? deligate по Паскалю - это список обратных вызовов(Callback). Ключевое слово - список. В Паскале подписаться на событие(например OnCreate) может только один подписчик, присвоив Код: pascal 1. 2. 3. В C# подписаться на аналогичное событие может сразу несколько подписчиков. Причём выполнятся они будут последовательно. Более того - в C# делигату можно сказать, что бы он выполнил список процедур асинхронно(.Invoke). А в переводе на Паскаль это выглядело бы примерно так: Код: pascal 1. 2. 3. 4. 5. DaniilSeryiСмотрю на синтаксис C# - так тошно, что хочется бл%€$ть. В принципе - ДА :) Это называется: - "найди сто ошибок в моем посте?" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 11:43 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
SashaMercuryskyANAпропущено... Это называется фунции высших порядков. Да, это одно из наиболее важных применений делегатов. В математике это называется функционалами. Ну да ладно. Зачем нужна возможность использования функции в качестве параметров других функций мне понятно, а делегаты это что ? Более общий случай. Только не отправляйте мне ссылку на w пожалуйстаИногда функции высшего порядка называют функционалами, хотя это не совсем верно, более точный эквивалент - оператор. Делегат задает определение функционального типа (класса) данных. Экземплярами класса являются функции. Описание делегата в языке C# представляет собой описание еще одного частного случая класса. Каждый делегат описывает множество функций с заданной сигнатурой. Каждая функция (метод), сигнатура которого совпадает с сигнатурой делегата, может рассматриваться как экземпляр класса, заданного делегатом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 12:22 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Все богатство LINQ и лямбда в C# в одной фразе )) new Control[]{textbox1,button1,button2,button3}.ToList().ForEach(x=>x.Enabled = false); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 12:37 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
AdxВсе богатство LINQ и лямбда в C# в одной фразе )) new Control[]{textbox1,button1,button2,button3}.ToList().ForEach(x=>x.Enabled = false);Г какое-то :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 12:43 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
skyANAГ какое-то :) Не без этого ;) Не все же стандартные библиотеки дублировать ;) Ну а серьезно, в C# много классов и функций используют делегаты. Это реально удобно. Пока не привыкнешь, конечно реакция похожая. Но тут уж : "Вы не любите кошек? Вы просто не умеете их готовить!" (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 12:54 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Делегаты в C# представляют собой экземпляры специального класса, который содержит в себе информацию о некотором методе и позволяет вызвать этот метод. Если быть точнее, то в общем случае на цепочку методов с определенной сигнатурой (см. Delegate и MulticastDelegate). Компилятор знает о делегатах и предоставляет синтаксический сахар, так как механизм делегатов задействован в некоторых конструкциях языка. 1. Реализация событий. 2. Реализация функций обратного вызова, в том числе при работе с неуправляемым кодом. 3. Реализация запуска новых потоков (один из вариантов, исторически первый). 4. Асинхронный запуск функций посредством предопределенных методов Begin/EndInvoke. 5. Реализация лямбда выражений. 6. Делегаты могут быть обобщенными. 7. Начиная с 4.0 версии .NET, параметры обобщенных делегатов могут быть ко/контрвариантными. 8. Так же делегаты могут выступать параметрами и возвращаемыми значениями функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 14:28 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
DaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты? Затем, что сначала теоретики кричат "указатели сакс", а потом оказывается, что без них очень хреново. И начинают придумывать функторы, делегаты и всякую прочую муть, которая позволяет замаскировать понятие "указатель". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 14:36 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
softwarerИ начинают придумывать функторы, делегаты и всякую прочую муть, которая позволяет замаскировать понятие "указатель". никакой связи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 14:50 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
SashaMercuryskyANAпропущено... Это называется фунции высших порядков. Да, это одно из наиболее важных применений делегатов. В математике это называется функционалами. Ну да ладно. Зачем нужна возможность использования функции в качестве параметров других функций мне понятно, а делегаты это что ? Более общий случай. Только не отправляйте мне ссылку на w пожалуйстаУказатель на метод объекта. В отличие от указателя на функцию, привязан к некоторому экземпляру объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 14:51 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
softwarerDaniilSeryiЛюди, объясните нормальному человеку, выросшему на Pascale, QBasice и VBA, зачем в C-подобных языках придумали такое уродство, как делегаты? Затем, что сначала теоретики кричат "указатели сакс", а потом оказывается, что без них очень хреново. И начинают придумывать функторы, делегаты и всякую прочую муть, которая позволяет замаскировать понятие "указатель". Чушь. Просто в .NET лямбды реализуются посредством делегатов, которые в очередь можно назвать с некоторой натяжкой типизированным указателем на функцию. в lisp или haskel отродясь никаких указателей не было, как и в JavaScript например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 14:51 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
BarloneУказатель на метод объекта. В отличие от указателя на функцию, привязан к некоторому экземпляру объекта. Приспокойно можно сделать так. Код: c# 1. Где тут экземпляр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 14:55 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Наброшу... Многие из функций операционной системы Windows, входящие в состав Win API 32, требуют при своем вызове задания callback - функций. Примером может служить работа с объектом операционной системы Timer. Конструктор этого объекта является функцией высшего порядка, и ей в момент создания объекта необходимо в качестве параметра передать callback - функцию, вызываемую для обработки событий, которые поступают от таймера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 14:58 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВЧушь. Просто в .NET лямбды реализуются посредством делегатов, Насколько я помню, делегаты в .NET появились прежде лямбд. ЕвгенийВв lisp или haskel отродясь никаких указателей не было, Делегатов в lisp тоже отродясь не было. Может, конечно, сейчас и добавили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 15:01 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Так лисповая лямбда и не делегат, она контекст захватывает. Если подыскивать аналог, это скорее анонимный класс с полями данных и одним методом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 15:08 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Valery_BВ Паскале подписаться на событие(например OnCreate) может только один подписчик, присвоив Form1.OnCreate:=DoFormCreate; Насколько я помню, в восьмой что ли дельфе (которую делали для .NET) добавили множественную подписку. Но поскольку вещь малоактуальная, развития она не получила. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 15:08 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
RWolf, так я и намекаю Евгению, что он в своей риторике несколько увлёкся и побежал в сторону от делегатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 15:10 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВBarloneУказатель на метод объекта. В отличие от указателя на функцию, привязан к некоторому экземпляру объекта. Приспокойно можно сделать так. Код: c# 1. Где тут экземпляр?Ну хорошо. Делегат может ссылаться на метод экземпляра объекта, а может и на статический или анонимный метод. Ок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 15:15 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Barlone, А может и как сферический конь в вакууме. Код: c# 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 15:28 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
Ещё наброшу... Пусть F - функция высшего порядка с параметром G функционального типа. Тогда функцию G , задающую параметр (а иногда и саму функцию F ), называют функцией обратного вызова ( callback функцией). Термин вполне понятен. Если в некотором внешнем слое функция Q вызывает функцию внутреннего слоя F , то предварительно во внешнем слое следует позаботиться о создании функции G , которая и будет передана F . Таким образом, функция Q внешнего слоя вызывает функцию F внутреннего слоя, которая, в свою очередь (обратный вызов) вызывает функцию G внешнего слоя. Чтобы эта техника работала, должен быть задан контракт. Функция высших порядков, написанная во внутреннем слое, задает следующий контракт: "всякая функция, которая собирается меня вызвать, должна передать мне функцию обратного вызова, принадлежащую определенному мной функциональному классу, следовательно, иметь известную мне сигнатуру". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 17:06 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
До кучи :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2015, 17:24 |
|
||
|
делегаты в языках программирования
|
|||
|---|---|---|---|
|
#18+
skyANAЕщё наброшу... Пусть F - функция высшего порядка с параметром G функционального типа. Тогда функцию G , задающую параметр (а иногда и саму функцию F ), называют функцией обратного вызова ( callback функцией). Термин вполне понятен. Если в некотором внешнем слое функция Q вызывает функцию внутреннего слоя F , то предварительно во внешнем слое следует позаботиться о создании функции G , которая и будет передана F . Таким образом, функция Q внешнего слоя вызывает функцию F внутреннего слоя, которая, в свою очередь (обратный вызов) вызывает функцию G внешнего слоя. Чтобы эта техника работала, должен быть задан контракт. Функция высших порядков, написанная во внутреннем слое, задает следующий контракт: "всякая функция, которая собирается меня вызвать, должна передать мне функцию обратного вызова, принадлежащую определенному мной функциональному классу, следовательно, иметь известную мне сигнатуру". Это в целом понятно, спасибо. Не могли бы вы привести пример, на котором было бы видно чёткую разницу между слоями, пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2015, 01:58 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39058198&tid=1340921]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 375ms |

| 0 / 0 |
