C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Lambda: We specify the method body with a lambda expression. We can use lambda expressions with delegate types.
LambdaThen: We call the delegate D method implementation with the argument "cat" using the Invoke method.
Tip: This program uses the "delegate" keyword. But many programs use higher-order procedures with just lambda expressions.
C# program that uses delegate
using System;
class Program
{
delegate void D(string value);
static void Main()
{
// ... Specify delegate with lambda expression.
D d = v => Console.WriteLine(v);
// ... Invoke delegate.
d.Invoke("cat");
}
}
Output
cat
Main: We create instances of this delegate Type. We need to declare a delegate type before creating instances of it.
Important: When you construct instances of the delegate type, the target method must have the same return value and arguments.
WriteOutput: The second argument is of type UppercaseDelegate. When called, WriteOutput invokes the function argument.
Note: The target method is specified as the sole argument. It is a method name, not a variable.
C# program that uses UppercaseDelegate
using System;
class Program
{
delegate string UppercaseDelegate(string input);
static string UppercaseFirst(string input)
{
char[] buffer = input.ToCharArray();
buffer[0] = char.ToUpper(buffer[0]);
return new string(buffer);
}
static string UppercaseLast(string input)
{
char[] buffer = input.ToCharArray();
buffer[buffer.Length - 1] = char.ToUpper(buffer[buffer.Length - 1]);
return new string(buffer);
}
static string UppercaseAll(string input)
{
return input.ToUpper();
}
static void WriteOutput(string input, UppercaseDelegate del)
{
Console.WriteLine("Your string before: {0}", input);
Console.WriteLine("Your string after: {0}", del(input));
}
static void Main()
{
// Wrap the methods inside delegate instances and pass to the method.
WriteOutput("Codex", new UppercaseDelegate(UppercaseFirst));
WriteOutput("Codex", new UppercaseDelegate(UppercaseLast));
WriteOutput("Codex", new UppercaseDelegate(UppercaseAll));
}
}
Output
Your string before: Codex
Your string after: Perls
Your string before: Codex
Your string after: perlS
Your string before: Codex
Your string after: PERLS
Tip: You can construct the UppercaseDelegate by specifying a lambda expression inside the constructor itself.
Info: This is functionally equivalent to using a static method with the same return value and argument.
C# program that uses lambda expression, delegate
using System;
class Program
{
// ...
// ... (Paste other methods here)
// ...
static void Main()
{
WriteOutput("Codex", new UppercaseDelegate(x => x.ToUpper()));
}
}
Output
PERLS
Tip: Lambdas use the => syntax to separate formal parameters and the method body.
Info: Whenever you see a method that receives a Predicate, Action, Func or Comparison, a lambda can be passed.
PredicateActionFuncComparisonBut: You can define custom events in any program. They are occasionally useful in complex programs.