Concept Flow - Why delegates are needed
Define a delegate type
Create a method matching delegate signature
Create delegate instance pointing to method
Pass delegate as parameter or store
Invoke delegate to call method indirectly
Program reacts to method call via delegate
Delegates let you store and pass methods as variables, so you can call methods indirectly and flexibly.