Archive for the ‘C#’ Category

Simplified Event Raising Pattern in C#

Saturday, January 30th, 2010

When creating events most people do something like this

        public event PropertyChangedEventHandler PropertyChanged; 

        internal void RaisePropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyName));
        }

A much simpler approach is to instead do this


        public event PropertyChangedEventHandler PropertyChanged = delegate { };

        internal void RaisePropertyChanged(string propertyName)
        {
            // No need for null check because of empty delegate
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }

which eleminates the need for the null check and eliminates the potential race conditions in multi-threaded code.