using System; using System.Linq; namespace IEnumerableDemo { public delegate int SomeOperation(int x, int y); class Program { static int Sum(int x, int y) => x + y; static void Main(string[] args) { //Örnek SomeOperation iki int girdi alarak int döndüren bir delegatedir. //Burada SomeOperation türüne add metodunu tanımladık. SomeOperation add = Sum; Console.WriteLine(add(10, 10)); /* ÇIKTI: 20 */ //Func .net içerisine eklenmiş hazır delegate metodlardır. //public delegate TResult Func<in T, out TResult>(T arg); gibi 16 girdi //ve bir çıktıya kadar destekleyecek şekilde tanımlanmış generic bir delgatedir. //Yukarıda delegate tanımlayarak yaptığımız işlemi delegate //tanımlamadan hazır Func delegatesini kullanarak yazdık; Func<int, int, int> addF = Sum; Console.WriteLine(addF(10, 10)); /* ÇIKTI: 20 */ //Lambda Fonksiyonları da aslında birer delegate metodlardır. //Örnekler Func<int, string> func1 = (x) => string.Format("string = {0}", x); Func<bool, int, string> func2 = (b, x) => string.Format("string = {0} and {1}", b, x); Func<double> func3 = () => Math.PI / 2.0; Func<int> getRandomNumber = () => { var r = new Random().Next(1, 100); return r; }; Console.WriteLine(func1.Invoke(1)); Console.WriteLine(func2.Invoke(true, 2)); Console.WriteLine(func3.Invoke()); /* ÇIKTI: string = 1 string = True and 2 1,5707963267949 */ Console.WriteLine(getRandomNumber()); //Kullanımı için lambda fonksiyonları güzel bir örnektir. //Yazılabilecek filtreleme ve seçimi işleme işlemlerini //Func ile yazarak çeşitli yerlerde kulllanabiliriz.. //Filtreleme için yazıldı. Çift Sayıları Seç Func<int, bool> evenNumbers = (x) => x % 2 == 0; //Seçimi İşleme Tersine Çevir ve String Türüne Dönüştür. Func<int, string> reciprocal = (x) => $"{ x } + {-1 * x} = 0"; int[] values = { 1, 2, 3, 4, 5, 6 }; var res = values.Where(evenNumbers).Select(reciprocal); foreach (var item in res) Console.WriteLine(item); /* ÇIKTI: 2 + -2 = 0 4 + -4 = 0 6 + -6 = 0 */ } } }