delegates
- A type-safe function pointer.
 - A reference to a method.
 - Delegate objects are passed to code that can then call the referenced method.
 - Used to implement callbacks and event listeners.
 - They create the ability to notify several methods that an event has occurred.
 - Can also be used to call multiple methods at once (that match their signature).