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