Trudno taki przykład, który by nie był sztuczny wymyślić. Osobiście tworze delegaty tylko gdy potrzebuje zdarzeniem przesłać jakąś specyficzną wartość (EventHandler nie zawsze jest użyteczny).
Gdy potrzebuje przekazać jakąś czynność do funkcji to wykorzystuję generyczne delegaty Action Func czy Predict.
Jak bym już miał na siłę coś zaproponować to może jakiś kalkulator (standardowo, nudny i beze sensu):
using System;
namespace ConsoleApp9
{
public delegate void Print(int first, int secound);
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.Do();
Console.ReadKey();
}
public void Add(int first, int second) =>
Console.WriteLine($"{first} + {second} = {first + second}");
public void Subtract(int first, int second) =>
Console.WriteLine($"{first} - {second} = {first - second}");
public void Multiply(int first, int second) =>
Console.WriteLine($"{first} * {second} = {first * second}");
public void Divide(int first, int second) =>
Console.WriteLine($"{first} / {second} = {(double)first / (double)second}");
public void SetAction(int first, int second, Print handler) =>
handler(first, second);
public void Do()
{
//Pierwszy sposób wykorzystania delegata.
Print print = Add;
print += Subtract;
print += Multiply;
print += Divide;
print.Invoke(8, 6);
//Drugi sposób wykorzystania delegata.
SetAction(4, 2, AddUp);
SetAction(4, 2, Subtract);
SetAction(4, 2, Multiply);
SetAction(4, 2, Divide);
}
}
}