EventHandler<> vs delegate
От: skodnik  
Дата: 03.08.10 12:27
Оценка: :))) :)))
В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так).
Я в своих приложениях использую только EventHandler<...>'ы и мне хватает.
Есть ли жизненная ситуация когда нужны именно делегаты?
Re: EventHandler<> vs delegate
От: Lloyd Россия  
Дата: 03.08.10 12:33
Оценка: +1
Здравствуйте, skodnik, Вы писали:

S>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает.

S>Есть ли жизненная ситуация когда нужны именно делегаты?

EventHandler<> и есть делегат.
Re[2]: EventHandler<> vs delegate
От: skodnik  
Дата: 03.08.10 13:02
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, skodnik, Вы писали:


S>>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает.

S>>Есть ли жизненная ситуация когда нужны именно делегаты?

L>EventHandler<> и есть делегат.


Не спорю. Кроме того, не спорю с Lloyd в принципе ))). Но продолжаю наблюдать в отдельных случаях использование delegate, что ИМХО — очень нечитабельная конструкция.
Re[3]: EventHandler<> vs delegate
От: hardcase Пират http://nemerle.org
Дата: 03.08.10 13:05
Оценка:
Здравствуйте, skodnik, Вы писали:

S>Не спорю. Кроме того, не спорю с Lloyd в принципе ))). Но продолжаю наблюдать в отдельных случаях использование delegate, что ИМХО — очень нечитабельная конструкция.


"delegate" создает локальную безымянную функцию (лямбду). Не нравится — можно заменить на (obj, args) => {}.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: EventHandler<> vs delegate
От: Lloyd Россия  
Дата: 03.08.10 14:19
Оценка: :)
Здравствуйте, skodnik, Вы писали:

L>>EventHandler<> и есть делегат.


S>Не спорю. Кроме того, не спорю с Lloyd в принципе ))).


Гм. Даже не знаю, обижаться или наоборот.

S>Но продолжаю наблюдать в отдельных случаях использование delegate, что ИМХО — очень нечитабельная конструкция.


Если вариант с EventHandler не подходит, то не грех воспользовться кастомным делегатом. В этом нет ничего "зазорного".
Re: EventHandler<> vs delegate
От: mrjeka Россия  
Дата: 03.08.10 14:36
Оценка:
Здравствуйте, skodnik, Вы писали:

S>В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так).

S>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает.
S>Есть ли жизненная ситуация когда нужны именно делегаты?

EventHandler — обработка событий, так?
1. вызов делегата — это не обязательно обработка какого-то события.
2. Делегат EventHandler имеет определенную сигнатуру, а если нужна другая?
Re[2]: EventHandler<> vs delegate
От: Jolly Roger  
Дата: 03.08.10 16:17
Оценка: +1
Здравствуйте, mrjeka, Вы писали:

M>EventHandler — обработка событий, так?


Нет, не так. EventHandler — это тип, просто тип и всё.
"Нормальные герои всегда идут в обход!"
Re[4]: EventHandler<> vs delegate
От: skodnik  
Дата: 04.08.10 07:57
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Если вариант с EventHandler не подходит, то не грех воспользовться кастомным делегатом. В этом нет ничего "зазорного".


В каком случае это может случиться Ваше "не подходит"? — изначальный вопрос топика.
Re[3]: EventHandler<> vs delegate
От: mrjeka Россия  
Дата: 04.08.10 09:20
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>Нет, не так. EventHandler — это тип, просто тип и всё.


Имеется ввиду, что если используется делегат EventHandler, то это подразумевает под собой обработку события.
А использование делегатов, это не только обработка событий.
Re[4]: EventHandler<> vs delegate
От: skodnik  
Дата: 04.08.10 09:47
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Здравствуйте, Jolly Roger, Вы писали:


JR>>Нет, не так. EventHandler — это тип, просто тип и всё.


M>Имеется ввиду, что если используется делегат EventHandler, то это подразумевает под собой обработку события.

M>А использование делегатов, это не только обработка событий.

Короче — EventHandler — это синтаксический сахар?
Re[4]: EventHandler<> vs delegate
От: Jolly Roger  
Дата: 04.08.10 09:49
Оценка:
Здравствуйте, mrjeka, Вы писали:

M>Имеется ввиду, что если используется делегат EventHandler, то это подразумевает под собой обработку события.

M>А использование делегатов, это не только обработка событий.

Боюсь, не могу с Вами согласиться. EventHandler — тип, описывающий сигнатуру метода. Если используется EventHandler, то это значит только то, эта сигнатура оказалась подходящей для данного делегата, и только. С другой стороны, любой вызов делегата можно считать генерацией события.
"Нормальные герои всегда идут в обход!"
Re[5]: EventHandler<> vs delegate
От: skodnik  
Дата: 04.08.10 10:03
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>Боюсь, не могу с Вами согласиться. EventHandler — тип, описывающий сигнатуру метода. Если используется EventHandler, то это значит только то, эта сигнатура оказалась подходящей для данного делегата, и только. С другой стороны, любой вызов делегата можно считать генерацией события.


Тут вот оно что на самом деле (ИМХО)

EventHandler<SomeEventArgs> означает делегат с параметрами (object sender, SomeEventArgs e) в то время как настоящий делегат может иметь различное количество различных параметров.
т.е. EventHandler<SomeEventArgs> является частным (и очень удачным) случаем делегата.
Re: EventHandler<> vs delegate
От: _FRED_ Черногория
Дата: 04.08.10 10:06
Оценка:
Здравствуйте, skodnik, Вы писали:

S>В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так).

S>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает.
S>Есть ли жизненная ситуация когда нужны именно делегаты?

А что вы понимаете под "delegate"? В C# начиная со второй версии данное слово выступает в нескольких ролях: для объвления типа делегата:
public delegate void MyMethod();

и для объявления анонимного метода:
MyMethod m = delegate { Console.WriteLine("Aaa"); };

Причём в ответах вам подразумевается то одно (здесь
Автор: Lloyd
Дата: 03.08.10
) то другое (здесь
Автор: hardcase
Дата: 03.08.10
) значение, что ни разу не способствует ни ясности, ни получению ответа.
Help will always be given at Hogwarts to those who ask for it.
Re[6]: EventHandler<> vs delegate
От: Jolly Roger  
Дата: 04.08.10 10:16
Оценка:
Здравствуйте, skodnik, Вы писали:

S>Тут вот оно что на самом деле (ИМХО)


Ну если "на самом деле" ...
"Нормальные герои всегда идут в обход!"
Re[2]: EventHandler<> vs delegate
От: skodnik  
Дата: 04.08.10 10:22
Оценка: -3
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, skodnik, Вы писали:


S>>В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так).

S>>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает.
S>>Есть ли жизненная ситуация когда нужны именно делегаты?

_FR>А что вы понимаете под "delegate"? В C# начиная со второй версии данное слово выступает в нескольких ролях: для объвления типа делегата:


Как Вы можете заметить, в моем посте нет ни одного упоминания delegate. Я пользовался термином "делегат".
И даже в четвертой версии C# делегаты остаются делегатами в отличие от delegate.
Re[3]: EventHandler<> vs delegate
От: _FRED_ Черногория
Дата: 04.08.10 10:23
Оценка: +1
Здравствуйте, 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.
Re[4]: EventHandler<> vs delegate
От: skodnik  
Дата: 04.08.10 10:31
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Я-то могу заметить. А вы что же, не читаете заголовки собственных сообщений?

Нет, я их пишу
_FRED_, при всем уважении в Вам, когда писал пост, даже не думал что кто-то в выражении (EventHandler<> vs delegate) термин delegate будет трактовать как то иначе чем "делегат".
Re[5]: EventHandler<> vs delegate
От: _FRED_ Черногория
Дата: 04.08.10 11:01
Оценка:
Здравствуйте, skodnik, Вы писали:

S>… когда писал пост, даже не думал что кто-то в выражении (EventHandler<> vs delegate) термин delegate будет трактовать как то иначе чем "делегат".


Так показалось мне и я промолчал, потом так показалось не только мне и промолчали вы.
Help will always be given at Hogwarts to those who ask for it.
Re: EventHandler<> vs delegate
От: vmpire Россия  
Дата: 04.08.10 12:22
Оценка:
Здравствуйте, skodnik, Вы писали:

S>В книгах по C# обычно сначала рассказывают что такое делегаты, потом говорят: как можно увидеть события очень хорошо реализуются делегатами (ну как то так).

S>Я в своих приложениях использую только EventHandler<...>'ы и мне хватает.
S>Есть ли жизненная ситуация когда нужны именно делегаты?
Например, если хочется передать делегат в метод, как callback.
Или использовать как аргумент функции высшего порядка (как вариант без использования лямбд).
Или для интеропа при передаче указателя на функцию.

Event — это обёртка над делегатом одной вполне определённой сигнатуры, то есть, по сути, просто соглашение о вызовах.
EventHandler<...> — это как раз делегат такой же сигнатуры, то есть он подходит быть обработчиком стандартных событий.
В то же время никто не мешает сделать событие с делегатом совсем другой сигнатуры (например, с треия int-ами в качестве параметров), при этом EventHandler<...> уже не подойдёт. Правда, для public методов библиотек так делать нежелательно, но это другая история.
Re[5]: EventHandler<> vs delegate
От: mrjeka Россия  
Дата: 04.08.10 14:39
Оценка:
Здравствуйте, Jolly Roger, Вы писали:


JR>Боюсь, не могу с Вами согласиться. EventHandler — тип, описывающий сигнатуру метода. Если используется EventHandler, то это значит только то, эта сигнатура оказалась подходящей для данного делегата, и только.


Вы в своей практике используете делегат EventHandler не для обработки событий, только лишь по тому, что сигнатура подходит?
Это все равно что сказать "поезда" подразумевая "самолет"

JR> С другой стороны, любой вызов делегата можно считать генерацией события.


Это как? Извиняюсь, но кажется это чушь полная. Попытайтесь объяснить.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.