One way to understand delegates is to think of delegates as naming method signatures.
The definition of delegate is similar to the definition of method, but there is no method body, and the keyword delegate should be added before the defined delegate name.