Использование делегатов в C # (или других языках)

Мне всегда было интересно, чем могут быть полезны делегаты и почему мы будем их использовать? Помимо безопасности типов и всех этих преимуществ в документации Visual Studio, каковы реальные случаи использования делегатов.

Я уже нашел один, и он очень нацелен.

using System;

namespace HelloNamespace {

    class Greetings{
    public static void DisplayEnglish() {
            Console.WriteLine("Hello, world!");
    }
    public static void DisplayItalian() {
             Console.WriteLine("Ciao, mondo!");
    }
    public static void DisplaySpanish() {
             Console.WriteLine("Hola, imundo!");
         }
    }

    delegate void delGreeting();

    class HelloWorld {
        static void Main(string [] args) {

    int iChoice=int.Parse(args[0]);
    delGreeting [] arrayofGreetings={
             new delGreeting(Greetings.DisplayEnglish),
             new delGreeting(Greetings.DisplayItalian),
             new delGreeting(Greetings.DisplaySpanish)};

    arrayofGreetings[iChoice-1]();
         }
    }
}

Но это не показывает мне в точности преимущества использования делегатов, а не условного "If ... {}" который разбирает аргумент и запускает метод.

Кто-нибудь знает, почему здесь лучше использовать делегат, а не "если ... {}". Также у вас есть другие примеры, которые демонстрируют полезность делегатов.

Спасибо!

Ответы на вопрос(11)

Ваш ответ на вопрос