[C#] события и делегаты

9173306234

не совсем понимаю, в чем смысл event-ов
например,
 
using System;
namespace MyNameSpace
{
    delegate void MyEventHandler;
    class MyEvent
    {
     public [event] MyEventHandler SomeEvent;
     public void OnSomeEvent
     {
     if (SomeEvent != null)
     SomeEvent;
     }
    }
    class EventDemo
    {
     static void handler
     {
     Console.WriteLine("event");
     }
     public static void Main
     {
     MyEvent ev = new MyEvent;
     ev.SomeEvent += new MyEventHandler(handler);
     ev.OnSomeEvent;
     }
    }
}

, где event не несет какой-либо разницы (с ним и без будет тоже самое).
Объясните gkc что есть событие в C#

Helga87

1. Если это event, а не поле типа делегата, то никто кроме кода самого класса, не имеет право запускать, получать доступ к подписавшимся через Delegate.GetInvocationList и пр.
2. Если это event, то можно делать типа:
public event EventHandler UserAuthenticated
{
add
{
...
}
remove
{
...
}
}

9173306234

1. спасибо. та книга, которую я читаю, ничего не говорит про данные ограничения.
2. да, имелось ввиду кроме такого случая.

Helga87

что за книга?
еще нельзя сделать lala.SomeEvent = null; — или такого плана

aleks058

Внутри класса можно.
Сегодня тока рефакторил свой код годичной давности и видел такое
Еще нельзя получить InvokationList, что положительно сказывается на секьюрности подписчиков события.

Helga87

да, я это сказал как существенное дополнение к пункту 1 первого сообщения
про InvocationList сказал сразу

9173306234

2: Шильд "Полный справочник по C#"
не такой уж и "полный" оказывается

Helga87

А. да. Шилдт - как введение хорошо. Лучше и глубже, в том числе целая глава про события, книжка Рихтера "Программирование на платформе Microsoft .NET". Могу дать почитать.

9173306234

2: спасибо, нашел ебук Рихтера
Оставить комментарий
Имя или ник:
Комментарий: