Daha önce delege ve anonim metod kavramlarından bahsetmiştilk. Lambda ifadeleri de bir çeşit anonim fonksiyon diyebiliriz. Lambda ifadeleri belirli bir girdisi olan sonuç döndüren klasik fonksiyonlardır. Kurallara bağlı delege ve metodlar tanımlamaktansa jenerik yapı sayesinde çok daha esnek ve anlaşılır metodlar yazabiliriz. Lambda operatörünün sol kısmında kalan kısım, fonksiyonun giriş değerleri sağ tarafında kalan kısım ise girilen değere göre döndürülecek ifade bloğunu içerir.
(x=>x*x) —> x değerini parametre kabul eden ve değerin karesini döndüren bir fonksiyondur.
Lambda ifadesi LINQ sorgulamarında daha etkin bir şekilde kullanılmaktadır. Bu yazıda sadece giriş yaptık.
//main kısmı
namespace Lamda_Expressions
{
class Program
{
delegate int İslem(int x);
delegate string Cümle(string a); //delegelerimizin imzasını tanımladık.
delegate int İslemtop(int a, int b);
static void Main(string[] args)
{
Class1 nesne = new Class1();
İslem tem = sayi => sayi * 4;
Console.WriteLine("islem sonucu:{0}",tem(5)); //5 sayısı tanımlanan delegede "sayi" değeridir.
Cümle tem2 = ifade => ifade + nesne.Cümle(); //ifade= delegemizin içinde değer alacak değişken
Console.WriteLine(tem2("Hello ")); //"Hello" burada ifade değişkeni oldu. Geri kalan "World" kelimesini class dan çağırdık.
tem2 += kelime => kelime + "Dünya"; // delegemize 2. fonksiyonu bağladık.
Console.WriteLine(tem2("Merhaba "));
İslemtop tem3 = (sayi1, sayi2) => nesne.top(sayi1, sayi2); //sayi1,sayi2 yada "İfade" değişkenleri için tekrar tip belirlememize gerek yoktur.
Console.WriteLine(tem3(7,8));
Delegate[] metodlar=tem2.GetInvocationList();
foreach (var item in metodlar)
{
Console.WriteLine("Metod adları:"+item.Method.Name); //tem2 delegemize 2 tane anonim metod bağlamıştık.
//Hangi metodların bağlı olduğunu görmüş olduk.Metotlar anonim olduğu için
//otomatik olarak isimlendirilir.
}
Console.ReadLine();
}
}
}
//class kısmı
namespace Lamda_Expressions
{
class Class1
{
public string Cümle()
{
string kelime="World";
return kelime;
}
public int top (int a,int b)
{
return a + b;
}
}
}