В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так).
Я в своих приложениях использую только EventHandler<...>'ы и мне хватает.
Есть ли жизненная ситуация когда нужны именно делегаты?
Здравствуйте, skodnik, Вы писали:
S>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает. S>Есть ли жизненная ситуация когда нужны именно делегаты?
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, skodnik, Вы писали:
S>>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает. S>>Есть ли жизненная ситуация когда нужны именно делегаты?
L>EventHandler<> и есть делегат.
Не спорю. Кроме того, не спорю с Lloyd в принципе ))). Но продолжаю наблюдать в отдельных случаях использование delegate, что ИМХО — очень нечитабельная конструкция.
Здравствуйте, skodnik, Вы писали:
S>Не спорю. Кроме того, не спорю с Lloyd в принципе ))). Но продолжаю наблюдать в отдельных случаях использование delegate, что ИМХО — очень нечитабельная конструкция.
"delegate" создает локальную безымянную функцию (лямбду). Не нравится — можно заменить на (obj, args) => {}.
Здравствуйте, skodnik, Вы писали:
L>>EventHandler<> и есть делегат.
S>Не спорю. Кроме того, не спорю с Lloyd в принципе ))).
Гм. Даже не знаю, обижаться или наоборот.
S>Но продолжаю наблюдать в отдельных случаях использование delegate, что ИМХО — очень нечитабельная конструкция.
Если вариант с EventHandler не подходит, то не грех воспользовться кастомным делегатом. В этом нет ничего "зазорного".
Здравствуйте, skodnik, Вы писали:
S>В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так). S>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает. S>Есть ли жизненная ситуация когда нужны именно делегаты?
EventHandler — обработка событий, так?
1. вызов делегата — это не обязательно обработка какого-то события.
2. Делегат EventHandler имеет определенную сигнатуру, а если нужна другая?
Здравствуйте, Lloyd, Вы писали:
L>Если вариант с EventHandler не подходит, то не грех воспользовться кастомным делегатом. В этом нет ничего "зазорного".
В каком случае это может случиться Ваше "не подходит"? — изначальный вопрос топика.
Здравствуйте, Jolly Roger, Вы писали:
JR>Нет, не так. EventHandler — это тип, просто тип и всё.
Имеется ввиду, что если используется делегат EventHandler, то это подразумевает под собой обработку события.
А использование делегатов, это не только обработка событий.
Здравствуйте, mrjeka, Вы писали:
M>Здравствуйте, Jolly Roger, Вы писали:
JR>>Нет, не так. EventHandler — это тип, просто тип и всё.
M>Имеется ввиду, что если используется делегат EventHandler, то это подразумевает под собой обработку события. M>А использование делегатов, это не только обработка событий.
Здравствуйте, mrjeka, Вы писали:
M>Имеется ввиду, что если используется делегат EventHandler, то это подразумевает под собой обработку события. M>А использование делегатов, это не только обработка событий.
Боюсь, не могу с Вами согласиться. EventHandler — тип, описывающий сигнатуру метода. Если используется EventHandler, то это значит только то, эта сигнатура оказалась подходящей для данного делегата, и только. С другой стороны, любой вызов делегата можно считать генерацией события.
Здравствуйте, Jolly Roger, Вы писали:
JR>Боюсь, не могу с Вами согласиться. EventHandler — тип, описывающий сигнатуру метода. Если используется EventHandler, то это значит только то, эта сигнатура оказалась подходящей для данного делегата, и только. С другой стороны, любой вызов делегата можно считать генерацией события.
Тут вот оно что на самом деле (ИМХО)
EventHandler<SomeEventArgs> означает делегат с параметрами (object sender, SomeEventArgs e) в то время как настоящий делегат может иметь различное количество различных параметров.
т.е. EventHandler<SomeEventArgs> является частным (и очень удачным) случаем делегата.
Здравствуйте, skodnik, Вы писали:
S>В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так). S>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает. S>Есть ли жизненная ситуация когда нужны именно делегаты?
А что вы понимаете под "delegate"? В C# начиная со второй версии данное слово выступает в нескольких ролях: для объвления типа делегата:
public delegate void MyMethod();
и для объявления анонимного метода:
MyMethod m = delegate { Console.WriteLine("Aaa"); };
Причём в ответах вам подразумевается то одно (здесь
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, skodnik, Вы писали:
S>>В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так). S>>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает. S>>Есть ли жизненная ситуация когда нужны именно делегаты?
_FR>А что вы понимаете под "delegate"? В C# начиная со второй версии данное слово выступает в нескольких ролях: для объвления типа делегата:
Как Вы можете заметить, в моем посте нет ни одного упоминания delegate. Я пользовался термином "делегат".
И даже в четвертой версии C# делегаты остаются делегатами в отличие от delegate.
Здравствуйте, skodnik, Вы писали:
S>>>В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так). S>>>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает. S>>>Есть ли жизненная ситуация когда нужны именно делегаты?
_FR>>А что вы понимаете под "delegate"? В C# начиная со второй версии данное слово выступает в нескольких ролях: для объвления типа делегата:
S>Как Вы можете заметить, в моем посте нет ни одного упоминания delegate. Я пользовался термином "делегат". S>И даже в четвертой версии C# делегаты остаются делегатами в отличие от delegate.
Я-то могу заметить. А вы что же, не читаете заголовки собственных сообщений?
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, _FRED_, Вы писали:
_FR>Я-то могу заметить. А вы что же, не читаете заголовки собственных сообщений?
Нет, я их пишу
_FRED_, при всем уважении в Вам, когда писал пост, даже не думал что кто-то в выражении (EventHandler<> vs delegate) термин delegate будет трактовать как то иначе чем "делегат".
Здравствуйте, skodnik, Вы писали:
S>… когда писал пост, даже не думал что кто-то в выражении (EventHandler<> vs delegate) термин delegate будет трактовать как то иначе чем "делегат".
Так показалось мне и я промолчал, потом так показалось не только мне и промолчали вы.
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, skodnik, Вы писали:
S>В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так). S>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает. S>Есть ли жизненная ситуация когда нужны именно делегаты?
Например, если хочется передать делегат в метод, как callback.
Или использовать как аргумент функции высшего порядка (как вариант без использования лямбд).
Или для интеропа при передаче указателя на функцию.
Event — это обёртка над делегатом одной вполне определённой сигнатуры, то есть, по сути, просто соглашение о вызовах.
EventHandler<...> — это как раз делегат такой же сигнатуры, то есть он подходит быть обработчиком стандартных событий.
В то же время никто не мешает сделать событие с делегатом совсем другой сигнатуры (например, с треия int-ами в качестве параметров), при этом EventHandler<...> уже не подойдёт. Правда, для public методов библиотек так делать нежелательно, но это другая история.
JR>Боюсь, не могу с Вами согласиться. EventHandler — тип, описывающий сигнатуру метода. Если используется EventHandler, то это значит только то, эта сигнатура оказалась подходящей для данного делегата, и только.
Вы в своей практике используете делегат EventHandler не для обработки событий, только лишь по тому, что сигнатура подходит?
Это все равно что сказать "поезда" подразумевая "самолет"
JR> С другой стороны, любой вызов делегата можно считать генерацией события.
Это как? Извиняюсь, но кажется это чушь полная. Попытайтесь объяснить.