Delegateler - 2

Parametereli delegateler

Parametreli Delegateler:

Yapmak istediğimiz işlem için bir senaryo oluşturalım. Kullanıcıdan 2 sayı alalım. (hata kontrollerini, falanı filanı boşvererek) sonra bir seçim yaptıralım, toplama, çıkarma, çarpma, bölme veya hepsini sırayla yaptıralım.

Kodları inceleyiniz.

delegate void IslemHandler(int a, int b); // Delegatimiz, 2 int parametre alan bir metodu point edecek.

class Islem // classımızı ve metodlarımızı yazıyoruz.
{
  public void Topla(int a, int b)
  {
    Console.WriteLine("Topla: {0}", a + b);
  }
  public void Cikar(int a, int b)
  {
    Console.WriteLine("Çıkar: {0}", a - b);
  }
  public void Carp(int a, int b)
  {
    Console.WriteLine("Çarp: {0}", a * b);
  }
  public void Bol(int a, int b)
  {
    Console.WriteLine("Böl: {0}", a / b);
  }

}
static void Main(string[] args)
{
  // kullanıcıdan 2 sayı alalım
  Console.Write("Sayı 1? ");
  int a = int.Parse(Console.ReadLine());
  Console.Write("Sayı 2? ");
  int b = int.Parse(Console.ReadLine());

  // kullanıcıya tercihleri sunalım
  Console.WriteLine("1 - Topla");
  Console.WriteLine("2 - Çıkar");
  Console.WriteLine("3 - Çarp");
  Console.WriteLine("4 - Böl");
  Console.WriteLine("5 - Hepsi");
  Console.Write("Seçiminiz :");
  string secim = Console.ReadLine();

  Islem clsIslem = new Islem(); // classımızdan object imizi oluşturalım
  IslemHandler ih; // şimdilik sadece tanımlıyoruz.

  switch (secim)
  {
    // 1-2-3-4 anlaşılır herhalde
    case "1": ih = new IslemHandler(clsIslem.Topla); break;
    case "2": ih = new IslemHandler(clsIslem.Cikar); break;
    case "3": ih = new IslemHandler(clsIslem.Carp); break;
    case "4": ih = new IslemHandler(clsIslem.Bol); break;
    
    // burası inanılmaz eğlenceli. önce bunu yap, sonra bunu, sonra bunu...
    // ilkinde = diğerlerinde += olduğuna dikkat. aynı şekilde -= de kullanabiliriz.
    case "5":
      ih = new IslemHandler(clsIslem.Topla);
      ih += new IslemHandler(clsIslem.Cikar);
      ih += new IslemHandler(clsIslem.Carp);
      ih += new IslemHandler(clsIslem.Bol);
      break;

    default:
      Console.WriteLine("Yanlış seçim :)");
      return;
  }

  // Metodun adını bilmediğimiz için yine invoke u kullanıyoruz.
  ih.Invoke(a, b);
}

Visual Studio hakikaten akıllı, bizi yönlendiriyor zaten:

delegate 2

Programın çıktısı:

delegate sonuç

 

ÖNCEKİ KONU