<p>What are the differences between delegates and an events? Don't both hold references to functions that can be executed?</p>

An
Event
declaration adds a layer of abstraction and protection on the
delegate
instance.  This protection prevents clients of the delegate from resetting the delegate and its invocation list and only allows adding or removing targets from the invocation list.