Chapter 4. Advanced C#
In this chapter, we cover advanced C# topics that build on concepts explored in Chapters 2 and 3. You should read the first four sections sequentially; you can read the remaining sections in any order.
Delegates
A delegate is an object that knows how to call a method.
A delegate type defines the kind of
method that delegate instances can call.
Specifically, it defines the method’s return type and its parameter
types. The following defines a delegate type called Transformer:
delegate int Transformer (int x);
Transformer is compatible with
any method with an int return type and
a single int parameter, such as
this:
static int Square (int x) { return x * x; }Assigning a method to a delegate variable creates a delegate instance:
Transformer t = Square;
which can be invoked in the same way as a method:
int answer = t(3); // answer is 9
Here’s a complete example:
delegate int Transformer (int x);
class Test
{
static void Main()
{
Transformer t = Square; // Create delegate instance
int result = t(3); // Invoke delegate
Console.WriteLine (result); // 9
}
static int Square (int x) { return x * x; }
}A delegate instance literally acts as a delegate for the caller: the caller invokes the delegate, and then the delegate calls the target method. This indirection decouples the caller from the target method.
The statement:
Transformer t = Square;
is shorthand for:
Transformer t = new Transformer (Square);
Note
Technically, we are specifying a method group when we refer to
Square without ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access