Answer
A delegate is a type-safe reference to a method. It defines a method signature and allows methods to be stored and invoked dynamically.
Delegates enable callbacks, event-driven programming, extensibility, and loose coupling by allowing execution of unknown methods at runtime.