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

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

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

EventHandler<> и есть делегат.
Re[3]: EventHandler<> vs delegate
От: Lloyd Россия  
Дата: 03.08.10 14:19
Оценка: :)
Здравствуйте, skodnik, Вы писали:

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


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


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

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


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

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


Нет, не так. EventHandler — это тип, просто тип и всё.
"Нормальные герои всегда идут в обход!"
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[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: EventHandler<> vs delegate
От: mrjeka Россия  
Дата: 03.08.10 14:36
Оценка:
Здравствуйте, skodnik, Вы писали:

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

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

EventHandler — обработка событий, так?
1. вызов делегата — это не обязательно обработка какого-то события.
2. Делегат 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[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> С другой стороны, любой вызов делегата можно считать генерацией события.


Это как? Извиняюсь, но кажется это чушь полная. Попытайтесь объяснить.
Re[6]: EventHandler<> vs delegate
От: vmpire Россия  
Дата: 04.08.10 15:07
Оценка:
Здравствуйте, mrjeka, Вы писали:

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

M>Это как? Извиняюсь, но кажется это чушь полная. Попытайтесь объяснить.
Не чушь. С точки зрения объектно-ориентированного моделирования "событие" — это понятие модели, которое в коде может выражаться по разному.
"Событие" модели может быть выражено в коде как "событие" языка (если язык поддерживает события явно, как, например, C#), как вызов делегата или даже просто как вызов метода.
Re[7]: EventHandler<> vs delegate
От: mrjeka Россия  
Дата: 04.08.10 15:28
Оценка:
Здравствуйте, vmpire, Вы писали:

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


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

M>>Это как? Извиняюсь, но кажется это чушь полная. Попытайтесь объяснить.
V>Не чушь. С точки зрения объектно-ориентированного моделирования "событие" — это понятие модели, которое в коде может выражаться по разному.
V>"Событие" модели может быть выражено в коде как "событие" языка (если язык поддерживает события явно, как, например, C#), как вызов делегата или даже просто как вызов метода.


Хорошо, простой пример


public void SomeMethod(SomeDlg dlg)
{
   dlg.Invoke();
}


Подобное использование делегата можно считать генерацией события?
Re[8]: EventHandler<> vs delegate
От: vmpire Россия  
Дата: 04.08.10 16:05
Оценка:
Здравствуйте, mrjeka, Вы писали:

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

M>>>Это как? Извиняюсь, но кажется это чушь полная. Попытайтесь объяснить.
V>>Не чушь. С точки зрения объектно-ориентированного моделирования "событие" — это понятие модели, которое в коде может выражаться по разному.
V>>"Событие" модели может быть выражено в коде как "событие" языка (если язык поддерживает события явно, как, например, C#), как вызов делегата или даже просто как вызов метода.

M>Хорошо, простой пример


M>
M>public void SomeMethod(SomeDlg dlg)
M>{
M>   dlg.Invoke();
M>}
M>


M>Подобное использование делегата можно считать генерацией события?

С точки зрения модели — да, можно. Это можно интерпретировать, как посылку сообщения "Invoke" классу "dlg" по некоторому событию внутри метода "SomeMethod".

К событиям C# это отношения, естественно, никакого не имеет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.