A delegate allows you to implement the
strategy design pattern in a more .NET idiomatic way. The code is short and compact and does not requires you to create interfaces and hierarchy of classes. Delegates provides a way to customize behavior at runtime. Starting from C# 3, the language provides a very elegant way to define methods using lambdas expressions. This increase readability of your code significantly. The .NET class libraries define generics delegates that can be used in all your applications:
Action and
Func. LINQ provides a vast collection of methods that accept delegates to perform many queries using a functional programming style. For an example see:
SelectMany in LINQ. Delegates can be used to implement callbacks and can point to a chain of methods. Delegates are an underlying building blocks on which C# events are built upon.
Professional C# developers use delegates and lambda expressions every day at work. Understanding how delegate works is an essential skill for new C# developers.