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