A delegate is a class that can hold a reference to a method.
A delegate class has a signature, and it can hold references only to methods that match its signature.
Base class for all the delegates is Delegate.
When we declare a delegate, it implicitly defines a class derived from System.Delegate. It automatically adds few methods that supports method invocations.