Skip to main content

Posts

Showing posts with the label delegate

What to use? Event or delegate?

Un eveniment este de fapt un delegate mai special. Comportamentul este destul de asemanator a unui eveniment in interiorul clasei unde este declarat, dar in afara acestei clase singurul lucru care se poate face este subscribed si unsubscribed. In momentul cand cineva face (un)subscribed, putem sa executam actiuni specifice prin definirea explicita a actiunilor de "Add" si "Remove"( per event). Chiar daca pentru un eveniment putem sa specificam nivelul de acces( public, protected, private, internal), asta nu inseamna ca oricine poate sa faca raise la eveniment. Doar clasa care contine evenimentul poate sa faca raise la eveniment. In mod normal evenimentele nu trebuie sa execute o actiune pe obiectul care contine acest eveniment, ele trebuie doar sa notifice abonatii ca ceva s-a intamplat. Din aceasta cauza evenimentele trebuie privite ca ceva optional. Aruncarea evenimentului este ceva optional, iar orice exceptie aparuta in momentul respectiv nu ar trebuii sa afec...

Delegates from .NET 1.0 to .NET 4.0

Mai mult ca sigur ati folosit delegate. Sunt utili cand trebuie sa specificam un comportament la runtime si nu la compile time. Prin acest mecanism putem sa scapam de mostenire in locurile unde aceasta a fost folosita pentru a definii un comportament specific. Exista mai multe tipuri de delegates definite core-ul de .NET: Predicate Action Func O sa incerc sa descriu pe scurt fiecare tip de delegate: Action reprezinta o actiune care nu returneaza nici un rezultat. Header-ul la metoda ar fi de forma urmatoare void fx(T) Exista mai multe implementari de Action, se pot definii pana la maxim 16 parametrii. In cazul in care avem nevoie de mai mult de 16 parametri, ne putem definii noi propile actiuni, dar nu cred ca este sanatos sa avem o actiune cu 16 parametrii sau mai multi. Predicate reprezinta o conditie care se ruleaza si care returneaza TRUE sau FALSE bool fx(T) Atat Action cat si Predicate apar odata cu .NET 2.0, dar ajung sa fie folosite la adevarata lor valoare abia in .NET 3.5 c...