1

重複の可能性:
デリゲートとは何かを適切な英語で説明できる人はいますか?

デリゲートを使用する利点を理解しようとしていますが、インターネット上でそれを適切に説明しているものをまだ見つけていません。

以下のコード (デリゲートを使用) が次のコードよりも優れているのはなぜですか?

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;
    // ...
  }
}
4

0 に答える 0