Вопрос по EventHandler из примера приложения Джоша Смита MVVM - PullRequest
3 голосов
/ 21 сентября 2010

Следующий код взят из примера MVVM Джоша Смита:

/// <summary>
/// Raised when this workspace should be removed from the UI.
/// </summary>
public event EventHandler RequestClose;

void OnRequestClose()
{
    //if (RequestClose != null)
    //        RequestClose(this, EventArgs.Empty);
    EventHandler handler = this.RequestClose;
    if (handler != null)
        handler(this, EventArgs.Empty);
 }

Комментированные строки - мое дополнение.Мой вопрос, что закомментированные строки будут делать то же самое, что и некомментированные строки, верно?Так зачем создавать еще одну ссылку на EventHandler?Или я что-то здесь упускаю?Спасибо

Ответы [ 3 ]

4 голосов
/ 21 сентября 2010

Танмой прав.Это сделано для того, чтобы предотвратить возможность изменения RequestClose (например, в null) в другом потоке после вашего «if», но до вашего «RequestClose ()».

1 голос
/ 21 сентября 2010

RequestClose может иметь значение null или другой объект, возможно, другим потоком, поскольку это переменная экземпляра. Присвоение значения локальной переменной означает, что у вас всегда будет ссылка на событие, и оно не может быть изменено другими потоками. Надеюсь, это поможет.

1 голос
/ 21 сентября 2010

Это не имеет значения - вы действуете по одной и той же ссылке на событие в обоих случаях. Я предпочитаю ваш закомментированный код.

Наслаждайтесь!

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