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:
Programın çıktısı:
#ASP-NET #net #delegate