#395 – Overriding the Default add and remove Accessors for an Event
August 23, 2011 Leave a Comment
When you use the event keyword to define an event, the compiler automatically creates a private backing variable that is a delegate instance, as well as code that encapsulates adding and removing methods to the delegate’s invocation list.
public event EventHandler Barked;

You can also explicitly declare the backing variable and the add/remove accessors. The following code results in equivalent behavior to the code shown above.
private EventHandler barked;
public event EventHandler Barked
{
add { barked += value; }
remove { barked -= value; }
}
To the client code, this looks the same–we just have a Barked event. But you could now add some custom code, e.g. logging.
private EventHandler barked;
public event EventHandler Barked
{
add
{
barked += value;
Logger.Log(string.Format("Added handler {0} ({1})", value.Method.Name, value.Method.ReflectedType));
}
remove
{
barked -= value;
Logger.Log(string.Format("Removed handler {0} ({1})", value.Method.Name, value.Method.ReflectedType));
}
}




