В .NET, почему порядок подключения к событиям так важен? - PullRequest
4 голосов
/ 12 октября 2011
using System;

static class Program
{
    static event Action A = delegate { };
    static event Action B = delegate { };

    static void Main()
    {
        A += B;
        B += ()=>Console.WriteLine("yeah");
        A.Invoke();
    }
}

Это ничего не печатает, но если я поменяю местами первые две строки Main, это произойдет.

Ответы [ 2 ]

5 голосов
/ 12 октября 2011

События являются неизменяемыми, т.е. вы получаете копию при назначении, как целые числа

int a = 1;
int b = 2;

a += b; // a == 3
b += 1; // a is still 3
2 голосов
/ 12 октября 2011

A + = B; добавляет список делегатов из B в A. Это копирование содержимого B, а не ссылка на B.

Это так же, как:

A = (Action)System.Delegate.Combine(A, B);

Так что порядок определенно важен.

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