Подписаться событие в детском классе? - PullRequest
3 голосов
/ 12 февраля 2010

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

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

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

Ответы [ 3 ]

1 голос
/ 12 февраля 2010
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);    
        }
    }
}
1 голос
/ 12 февраля 2010

Это довольно просто и дает понять.

http://msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx

0 голосов
/ 12 февраля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...