C # Преимущество делегатов

Возможный дубликат:
   Может ли кто-то перевести на правильный английский, что такое делегат?

Я пытался использовать преимущества использования делегатов, однако я все еще ничего не нашел в Интернете, что объясняет это должным образом.

Почему код ниже (который использует делегаты) лучше, чем следующий фрагмент кода?

delegate int DiscountDelegate();

class Program
{
  static void Main(string[] args)
  {
    Calculator calc = new Calculator();
    DiscountDelegate discount = null;
    if (DateTime.Now.Hour < 12)
    {
      discount = new DiscountDelegate(calc.Morning);
    }
    else if (DateTime.Now.Hour < 20)
    {
      discount = new DiscountDelegate(calc.Afternoon);
    }
    else
    {
      discount = new DiscountDelegate(calc.Night);
    }
    new ShoppingCart().Process(discount);
  }
}

class Calculator
{
  public int Morning()
  {
    return 5;
  }
  public int Afternoon()
  {
    return 10;
  }
  public int Night()
  {
    return 15;
  }
}

class ShoppingCart
{
  public void Process(DiscountDelegate discount)
  {
    int magicDiscount = discount();
   //...
  }
}

В сравнении с:

class Program
{
  static void Main(string[] args)
  {
    Calculator calc = new Calculator();
    int discount;
    if (DateTime.Now.Hour < 12)
    {
      discount = calc.Morning();
    }
    else if (DateTime.Now.Hour < 20)
    {
      discount = calc.Afternoon();
    }
    else
    {
      discount = calc.Night();
    }
    new ShoppingCart().Process(discount);
  }
}

class Calculator
{
  public int Morning()
  {
    return 5;
  }
  public int Afternoon()
  {
    return 10;
  }
  public int Night()
  {
    return 15;
  }
}

class ShoppingCart
{
  public void Process(int discount)
  {
    int magicDiscount = discount;
   //...
  }
}
1
nl ja de
В этом примере у вас нет никакой пользы от делегатов. Основное использование делегатов - в событиях на C #.
добавлено автор One Man Crew, источник
Рекомендуемая ссылка: akadia.com/services/dotnet_delegates_and_events.html
добавлено автор One Man Crew, источник
если бы была добавлена ​​еще одна функциональность, добавленная в программу, тогда была бы какая-то польза в использовании делегатов? если да, можете ли вы расширить мой код, чтобы предоставить пример?
добавлено автор Backwards_Dave, источник
В этом коде нет никаких преимуществ. Используйте делегат, когда вам нужно пройти поведение . Здесь вы передаете только значения.
добавлено автор carlosfigueira, источник
Делегаты - это указатели на функции. В вашем случае вы можете не сразу увидеть преимущества, но они используются для потоков, таких как функции обратного вызова или события Windows. Когда вы регистрируете обработчик событий Windows, вы регистрируете делегат в стеке. Когда событие запускается, оно вызывает события из стека. Изучите обработчики событий Windows, шаблоны проектирования MVC или linq (например, делегат предиката). Это настолько мощно, что у них есть 3 способа экспериментировать с делегатом.
добавлено автор rbtLong, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot