What is delegate and why & when should we use it? Explain a real-time scenario when we should actually use them.

A delegate holds the reference of a method. We can also pass the delegate/method-reference as a parameter so that another method can execute it when required.