3. Delegates
are objects that contain references to method that need to be
invoked instead of containing the actual method names.
call any method, which is identified only at runtime.
to associate a delegate with a particular method, the method must
have the same return type and parameter type as that of the delegate.
4. 1. Declaring delegates
2. Create the method to be referenced
3. Instantiating delegates
4. Call
https://gist.github.com/2427445
7. Events
a way for a class to provide notifications to clients of that
class when some interesting thing happens to an object.
8. Implement Events
1. Define a public delegate for the event
2. Create the event using the delegate
3. Subscribe to listen and handle the event
4. Raise the event
https://gist.github.com/2427324