2010-02-12 2 views
3

Я думал, что понимаю события на C#. Иногда они используются, если вы не хотите называть метод напрямую, а не левым местом для пользовательской реализации. Но когда?Подписывать событие в дочернем классе?

Программист A пишет класс A, программист B пишет класс B. Класс A должен возбуждать событие, которое Class B регистрирует и реагирует, но класс A ничего не знает о функции, которую использует класс B для обслуживания.

Не могли бы вы предоставить мне простой пример?

ответ

1
public class A 
{ 
    private readonly B _B = new B(); 

    public class A() 
    { 
     _B.MyEvent += MyEventHandler; 
    } 

    private void MyEventHandler(object sender, EventArgs e) 
    { 
     // Handle 
    } 
} 

public class B 
{ 
    public event EventHandler MyEvent; 

    // Call this when you raise the event so you don't 
    // need check if MyEvent is null. 
    private void OnMyEvent() 
    { 
     if (MyEvent != null) // If this is null we have no subscribers. 
     { 
      MyEvent(this, EventArgs.Empty);  
     } 
    } 
} 
0

Когда вы говорите «они используются, если вы не хотите, чтобы вызвать метод непосредственно, а не слева место для пользовательской реализации», вы делаете меня думать, что вы не можете полностью понять разницу между простым делегатом и событием. Путь упрощения здесь, но вот краткое объяснение ...

Делегаты - это способ позволить кому-то, кто пишет код с помощью вашего кода, предоставить свой собственный метод. Таким образом, они не проходят через насос сообщений и не синхронно и т. Д.

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

К счастью, большинству людей кажется, когда нужно использовать тот или иной инстинкт. Опять же, грубое упрощение здесь, но, надеюсь, достаточно для дальнейшего чтения.

Смежные вопросы