Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/20: Рейтинг темы: голосов - 20, средняя оценка - 4.90
pavel911
6 / 6 / 2
Регистрация: 02.08.2014
Сообщений: 119
1

Чем отличаются делегаты и события

08.08.2014, 17:06. Просмотров 4029. Ответов 12
Метки нет (Все метки)

Вопрос, наверное, странный. Но чем отличаются делегаты и события в C#?

Добавлено через 5 минут
Если я правильно понял, то при наступлении некоторого события вызываются методы, которые связаны с обработкой этого события. Ниже приведен пример из книги, из которого отличий между событиями и делегатами для меня не видно.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
 
delegate void MyEventHandler();
 
class MyEvent
{
    public event MyEventHandler SomeEvent;
 
    public void OnSomeEvent()
    {
        if (SomeEvent != null)
            SomeEvent();
    }
}
 
class Demo
{
    static void Handler()
    {
        Console.WriteLine("EVENT!");
    }
 
    static void Main()
    {
        MyEvent evt = new MyEvent();
 
        evt.SomeEvent += Handler;
        evt.OnSomeEvent();
    }
}
Добавлено через 28 секунд
Почему бы не использовать обычный делегат?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2014, 17:06
Ответы с готовыми решениями:

Для чего использовать ключевое слово event в объявлении события, если события — это те же самые делегаты
Господа, скажите пожалуйста, для чего использовать ключевое слово event в...

Делегаты и события
Помогите с программой! Должно быть 4 события. Класс «Метеостанция». События...

Делегаты и события
Нужно создать программу в которой будет Форма (WinForm) и исполняющий код в...

Делегаты и события
Для данной программы добавить делегат и событие using System; using...

делегаты и события
Здравствуйте! Помогите пожалуйста с задачей: Есть два делегата: delegate void...

12
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.08.2014, 17:11 2
делегат инкапуслирет метод. событие же по сути представляет из себя список делегатов, не забываем что подписчиков может быть несколько + удобный механизм подписки/отписки в виде операторов += -=
0
pavel911
6 / 6 / 2
Регистрация: 02.08.2014
Сообщений: 119
08.08.2014, 17:59  [ТС] 3
Делегат может ссылаться как на один метод, так и на целый список методов, сигнатура и тип возврата которых соответ-ют типу делегата. То есть, в этом события и делегаты одинаковые.

Добавлено через 1 минуту
В делегат также методы добавляются с помощью операторов + и -. К тому же в список методов, на которые ссылается делегат, можно включить методы из различных классов. Получается, что и в этом тоже делегаты и события одинаковые?

Добавлено через 25 секунд
Или что-то неправильно говорю?

Добавлено через 41 минуту
Пришел к следующему выводу. События и делегаты - это фактически одно и то же. Однако события являются оберткой над делегатами и позволяют управлять доступом при добавлении и удалении методов из делегата. Это все отличия? Для этого были сделаны события?
0
insite2012
Модератор
Эксперт .NET
4865 / 3818 / 1096
Регистрация: 12.10.2013
Сообщений: 11,095
Записей в блоге: 2
08.08.2014, 20:36 4
pavel911, не в обиду, но это все есть же в книгах. Вы что читали? Почитайте Троелсена, у него это очень подробно расписано...
1
tranquil
51 / 51 / 10
Регистрация: 26.09.2013
Сообщений: 277
08.08.2014, 20:52 5
pavel911, а insite2012, правду говорит, сам изучаю это все по Троелсону.
0
pavel911
6 / 6 / 2
Регистрация: 02.08.2014
Сообщений: 119
08.08.2014, 20:57  [ТС] 6
Читал, хотел уточнить!
0
tranquil
51 / 51 / 10
Регистрация: 26.09.2013
Сообщений: 277
08.08.2014, 20:58 7
http://professorweb.ru/my/csharp/charp_theory/level10/10_7.php -события
http://professorweb.ru/my/csharp/charp_theory/level10/10_1.php - делегаты
0
insite2012
Модератор
Эксперт .NET
4865 / 3818 / 1096
Регистрация: 12.10.2013
Сообщений: 11,095
Записей в блоге: 2
08.08.2014, 21:02 8
pavel911, ну а что там уточнять... Ладно, вот. События - те же делегаты, основные отличия:
1. Переменная экземпляра делегата создается неявно и потому недоступна внешнему коду.
2. Нет необходимости создавать отдельные методы для присвоения переменной делегата ссылок на метод (эти методы есть, но их создает компилятор, в IL коде это видно).
1
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
11.08.2014, 11:10 9
события(ну еще Func и Action), в отличии от делегатов поддерживают контрвариацию параметров, то есть событию с параметром-базового класса можно подписать делегат с параметром класса-наледника.
еще события можно делать виртуальными и перегружать методы add и remove (+= и -=).
еще вроде читал, что события автоматически поддерживают потокобезопастность, а с делегатами необходимы дополнительные пляски с бубном.
0
Nevermore_
73 / 73 / 30
Регистрация: 22.03.2013
Сообщений: 224
11.08.2014, 11:41 10
Делегат это поле класса (неявное) , событие это свойство(метод). То есть если использовать делегат , то его можно перезаписать на свой, а в событии только добавлять удалять
1
IamRain
1376 / 1230 / 387
Регистрация: 02.08.2011
Сообщений: 3,628
11.08.2014, 12:12 11
Цитата Сообщение от Learx Посмотреть сообщение
события автоматически поддерживают потокобезопастность
Да ну? Перечитайте мат.часть.
0
kolorotur
Эксперт .NET
10713 / 8873 / 2221
Регистрация: 17.09.2011
Сообщений: 15,259
Завершенные тесты: 1
13.08.2014, 00:03 12
IamRain, речь, вероятно, идет о добавлении/удалении подписчиков из разных потоков и возможной гонке.
Если для события не переопределять методы add/remove, то дефолтная реализация потокобезопасна.
0
DataPlanner
153 / 183 / 49
Регистрация: 25.11.2013
Сообщений: 978
13.08.2014, 03:56 13
События позволяют делегату динамически менять методы +/-
0
13.08.2014, 03:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2014, 03:56

Делегаты и события
Здравствуйте! Хотелось бы разобраться в событиях исключительно на примере...

Делегаты и события
Перечитал уже все сайты не могу понять события это те же делегаты только...

Делегаты и события
Доброго времени суток уважаемые, очень туго идет освоение delegate and event,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru