C#’ta İsimsiz Metodlar(Anonymous Methods)
Merhaba,
C#’ta bir temsilciye(Delegate) metod bağlarken Anaonymous Method yapısını kullanabilir, önceden tanımlanmış bir metoda gereksinim duymadan direkt olarak kod bloğu bağlayabiliriz.
public delegate int Topla(int Sayi1, int Sayi2);
static void Main(string[] args)
{
//Lambda
Topla t1 = new Topla((a, b) => { return a + b; });
//Lambda
Topla t2 = (a, b) => { return a + b; };
//Anonymous Method
Topla t3 = delegate (int Sayi1, int Sayi2)
{
return Sayi1 + Sayi2;
};
Console.WriteLine(t1(1, 3));
Console.WriteLine(t2(2, 4));
Console.WriteLine(t3(3, 5));
}
Yukarıdaki örnek kod bloğunda da gördüğünüz gibi yaptığımız işlem aslen arka planda bir metod tanımlamakta ve ilgili delegeye bağlamaktadır. Bu tanımlamaların “t2” ve “t3” referanslarında “new” anahtar sözcüğüne gerek kalmaksızın delegemize metod bağlayabilmekteyiz.
“t1” ve “t2” referanslarında kullanılan yöntem Lambda ifadeleriyle gerçekleştirilmiştir. Anonymous Methods dediğimiz yapı “t3” referansındakidir.
Neden isimsiz metod olduğunu anlamışızdır umarım. Önceden tanımlanmış bir metodun ismini delegemize belirtme gereksinimi duymadığımız için isimsiz metotdur. Ayrıca “t2” ve “t3” referansındaki kullanımı incelersek eğer delegemizin tipine gerek duymaksızın, kod bloğu oluşturuyor ve ilgili delegemize bağlayabiliyoruz. Özellikle “t3” referansındaki kullanımda “delegate” anahtar sözcüğü otomatik olarak temsilcinin adının yerini tutmaktadır.
Aynı mantıkla Anonymous Methods yapılarını Event(Olay)’lar içinde kullanmaktayız.
private void Form1_Load(object sender, EventArgs e)
{
//Lambda
btnTikla.Click += (Sender, E) =>
{
};
//Anonymous Method
btnTikla.Click += delegate (object Sender, EventArgs E)
{
};
}
Tabi Anonymous Methods dediğimiz yapılar, kronolojik olarak Lambda ifadeleri için temel arz eden bir yapıya sahiptir. Dilin grameri açısından hala desteklensede, kullanım açısından Lambda varken, Anonymous Methods çok tercih edilmemektedir.
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

1 Cevap
[…] oluşturmaya izin verirken C#’ta 7.0 versiyonuna kadar izin verilmemekte, biz de bu ihtiyacı Anonymous Methodst, Delegate yahut Expression yapılarıyla […]