views:

82

answers:

3

The following code is from the MVVM sample by Josh Smith:

/// <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);
 }

The commented lines are my addition. My question is the commented lines would do the same thing as the uncommented lines right? So why create another EventHandler reference? Or am I missing something here? Thanks

+1  A: 

Hi,

It makes no difference - you are acting on the same event reference in both cases. I prefer your commented code.

Enjoy!

Doug
+3  A: 

Tanmoy is right. This is done to prevent possibility of RequestClose being changed (to null, for example) in other thread after your "if" but before your "RequestClose()".

Dimps
+1  A: 

The RequestClose may be set to null or to another object, possibly by another thread since that is an instance variable. Assigning the value to a local variable means that you will always have a reference to the event and it can't be changed by other threads. Hope this helps.

Michael Detras