Delegates and Lambdas
Delegate Variables
A delegate variable stores a callable method with a matching signature.
delegate
A delegate type describes a method shape that can be stored and called.
Delegate Variables
DelegateVariables.cs
Replay: real traced execution (multi-file project)
using System;
delegate int IntOperation(int value);
class Program
{
static int Double(int value)
{
return value * 2;
}
static void Main()
{
int input = 6;
IntOperation operation = Double;
int result = operation(input);
Console.WriteLine($"input={input}");
Console.WriteLine($"result={result}");
}
}
using System;
delegate int IntOperation(int value);
class Program
{
static int Double(int value)
{
return value * 2;
}
static void Main()
{
int input = 3;
IntOperation operation = Double;
int result = operation(input);
Console.WriteLine($"input={input}");
Console.WriteLine($"result={result}");
}
}
using System;
delegate int IntOperation(int value);
class Program
{
static int Double(int value)
{
return value * 2;
}
static void Main()
{
int input = 9;
IntOperation operation = Double;
int result = operation(input);
Console.WriteLine($"input={input}");
Console.WriteLine($"result={result}");
}
}
input ← 6, operation ← IntOperation
12static void Main()13{14 int input→ 6 = 6; //@input=3, 915 IntOperation operation→ IntOperation = Double;16 int result = operation(input6);static int Double(int value)
6{7 static int Double(int value6)8 {9 return value6 * 2;10 }result ← 12
15 IntOperation operation = Double;16 int result→ 12 = operation(input6);1718 Console.WriteLine($"input={input6}");19 Console.WriteLine($"result={result12}");20}outputinput=6 result=12
input ← 3, operation ← IntOperation
12static void Main()13{14 int input→ 3 = 3;15 IntOperation operation→ IntOperation = Double;16 int result = operation(input3);static int Double(int value)
6{7 static int Double(int value3)8 {9 return value3 * 2;10 }result ← 6
15 IntOperation operation = Double;16 int result→ 6 = operation(input3);1718 Console.WriteLine($"input={input3}");19 Console.WriteLine($"result={result6}");20}outputinput=3 result=6
input ← 9, operation ← IntOperation
12static void Main()13{14 int input→ 9 = 9;15 IntOperation operation→ IntOperation = Double;16 int result = operation(input9);static int Double(int value)
6{7 static int Double(int value9)8 {9 return value9 * 2;10 }result ← 18
15 IntOperation operation = Double;16 int result→ 18 = operation(input9);1718 Console.WriteLine($"input={input9}");19 Console.WriteLine($"result={result18}");20}outputinput=9 result=18