Daha önceden C# Metotlardan bahsetmiştik metotlar işlerimizi kolaylaştıran küçük kod parçalarıydı.
Delegateler bir veya birden fazla metodu işaret eden onların adreslerini hafıza saklayan referans türünden nesnelerdir.
toplama, çıkartma , çarpma ve bölme işlemleri için programda metodlar tanımlanmış olsun bu meteotların hepsini aynı anda çalıştırmak için dört işlemi gösteren bir nesneye ihtiyacımız var işte bu nesnede bizim için delegate oluyor
Peki bu delegate (temsilci) tanımlama ve kullanma işlemi nasıl oluyor. Bunun için Bazı kurallarımız var en önemlisi delegate (temsilci) türü ne ise metot türleri de aynı olmalıdır. Peki delegate (temsilci) nasıl tanımlanıyor
erişimbelirleyici delegate geridönüştürü isim(parametreler);
şeklinde olmalıdır..
hemen bir örnek yapalım
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { public delegate void mesajyaz(string bilgi); static void mesaj(string yazilacak) { Console.WriteLine("Delegate çalıştırıldı ekrana" + yazilacak + "yazdi"); } static void Main(string[] args) { mesajyaz yaz = new mesajyaz(mesaj); yaz("Bilişim Öğretmeni Delegate Örnek 1"); Console.ReadKey(); } } }
Şimdide delegate (temsilci) tanımında dediğimiz birden fazla metodu işaret edebilir kısmında söylediğimizi örnekle açıklayalım
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { delegate void islem(double sayi1, double sayi2); static void toplam(double s1, double s2) { Console.WriteLine( s1 + s2); } static void fark(double s1, double s2) { Console.WriteLine( Math.Abs(s1 - s2)); } static void carpim(double s1, double s2) { Console.WriteLine( s1 * s2); } static void bolum(double s1, double s2) { Console.WriteLine( s1 / s2); } static void Main(string[] args) { islem dortislem=new islem(toplam); dortislem += fark; dortislem += carpim; dortislem += bolum; dortislem(15, 3); Console.ReadKey(); } } }
Örneğimizde dortislem isimli delegate(temsilci) tanımlayarak bunun içine toplam,fark,carpim ve bolum metodlarını adresledik daha sonra tanımladığımız delegate üzerinden 15 ve 3 sayılarını metotların tümüne gönderdik ve sonuç olarak karşımıza
18
12
45
3 çıktı bir önceki örnekten farklı olarak tanımladığımız delegate üzerinde metotları atarken “+=” işareti kullandık..