Может кто-нибудь объяснить, что происходит за кулисами? - PullRequest
8 голосов
/ 02 апреля 2012

Для меня не совсем очевидно, что происходит в этой ситуации.

Я ожидаю, что обе функции будут запущены.

Либо класс EventHander хранит список функций для запуска какмассив - и массив копируется в новый каждый раз, когда что-то добавляется / удаляется - или когда выполняется назначение, все это копируется в новую "коллекцию" - а не просто ссылка.

Кто-нибудь, пожалуйста, просветите меня: D

Вот небольшой скрипт Linqpad:

public class Moop
{
    public EventHandler myEvent;
}

void Main()
{
    var moo = new Moop();
    moo.myEvent += (o, sender) => { "Added to Moop #1".Dump(); };   

    var moo2 = new Moop();

    //Copy the reference, I assume?
    moo2.myEvent = moo.myEvent;

    moo2.myEvent += (o, sender) => { "Added to Moop #2".Dump(); }; 

    //Fire the event on #1
    moo.myEvent(null, null);
}

1 Ответ

8 голосов
/ 02 апреля 2012

Списки обработчиков событий являются делегатами, а делегаты являются неизменяемыми - как строки. Таким образом, вы копируете делегата, и второй обработчик события «добавляется» ко второму делегату, а не к первому.

Подробнее о делегатах можно узнать по адресу http://www.c -sharpcorner.com / uploadfile / Ashush / Delegates-in-C-Sharp /

Удачи!

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