Introduction
As a previous C developer I am used to working with function pointers and I found the C# Delegates quite easy to work with in comparison. One thing that made me a bit confused initially however were the Delegate types defined in the .NET framework. Why would I want to bother with Actions, Funcs, and Predicates? After reading up on them I almost never define custom Delegates anymore. I will try to explain their use cases below.Delegates
A Delegate in C# is similar to a function pointer in C or C++. You can always define a custom Delegate that matches any method signature you want. However, the .NET Framework defines a number of Delegates you can use so that you don't have to define your own. These Delegates are grouped into three different Delegate groups, Actions, Funcs, and Predicates.Actions
An Action is, as the name implies, a Delegate that encapsulates a method that performs an operation and where you expect no result to be returned. The Action Delegate takes zero or more input parameters (up to 16). Typical actions are methods like Print(msg), Show(window), or Beep().Funcs
A Func is a Delegate that encapsulates a method that performs an operation and returns a result. Similar to the Action Delegate it takes zero or more input parameters. The difference is that it must return a value or reference. Typical functions are methods like Add(i, j), Max(values[]), or Join(separator, strings[]).Predicates
Finally, a Predicate is a Delegate that encapsulates a method that takes a single input parameter and returns a boolean. It is a special kind of Func used to answer questions such as CanExecute(conditional), IsWithinRange(value), or OlderThan(years).There are a lot of methods in the .NET Framework that takes Delegates as input parameters. If you call a method with a Lambda Expression as an input parameter you are defining a Delegate that the called method will invoke. LINQ, as an example, relies heavily on Delegates.
If you don't have a lot of experience with Delegates I recommend reading up on them (links are provided below) and start using them where appropriate.
Learn more
The Delegate ClassAction Delegate
Func Delegate
Predicate Delegate
Lambda Expressions
Kommentarer
Skicka en kommentar