11 Temmuz 2024 Perşembe

Delegate, Action, Predicate ve Func



Return type'ı ve aldığı parametre sayısı aynı  olan birden fazla metodu tek bir yerde paketlemek isteyebiliriz. Bu paketi çağırdığımız zamanda pakete eklenmiş tüm metodların eklendiği sıraya göre çağrılmalarını sağlayabiliriz. Bunu delegate ile yapabiliriz.

Delegate, Metodların referansını tutabilen bir nesnedir. Delegateleri tetiklemek için içerisinde bulunan invoke() metodu çağırılır. Eğerki delegatenin referensını tuttuğu metodlar parametre alıyorsa bu parametreler Invoke() metodu içerisine eklenmelidir. 

1-) Return tipi Void olan ve parametre almayan metodların referansını tutan delegate örneği.


2-) Return tipi Void olan parametre alan metodların referansını tutan delegate örneği.


3-) Return tipi int olan ve parametre alan metodların referansını tutan delegate örneği.

Yukarıdaki örnekte void olmayan metodlarda birden fazla metod çalıştırıldığında geriye en son hangi metod çalıştırıldıysa onun sonucu döner. Yani result değişkeninin sonucu Cikart işleminin sonucu olan 3 tür.


Action

Geriye değer döndürmeyen parametreli veya parametresiz metodları encapsule eder.



Predicate

Geriye bool değer döndüren ve kesinlikle en az bir tane parametre almak zorunda olan metodları encapsule eder.


Func

Geriye değer döndürmesi gerekir ve parametre alabilir. 

Örneğin, Func<int, bool> türünde bir delagete, bir int parametre alıp bool sonuç döndüren bir metodu ifade eder.