Delegates are similar to interfaces. You are simply defining a contract which can be fulfilled by whatever is consuming the class that uses the delegate. The big difference between an interface and a delegate is an interface defines a contract for an entire class while a delegate defines a contract for a single method.
Array Predicate, best Example of Lambda.
A delegate is a named type that defines a particular kind of method. Just as a class definition lays out all the members for the given kind of object it defines, the delegate lays out the method signature for the kind of method it defines.
Based on this statement, a delegate is a function pointer and it defines what that function looks like.
A great example for a real world application of a delegate is the Predicate. In the example from the link, you will notice that Array.Find takes the array to search and then a predicate to handle the criteria of what to find. In this case it passes a method ProductGT10 which matches the Predicate signature.
If you're interested in seeing how the Delegate pattern is used in real-world code, look no further than Cocoa on Mac OS X. Cocoa is Apple's preferred UI toolkit for programming under Mac OS X, and is coded in Objective C. It's designed so that each UI component is intended to be extended via delegation rather than subclassing or other means.
tm
https://msdn.microsoft.com/en-us/library/d9hy2xwa.aspx