Presentation laddar. Vänta.

Presentation laddar. Vänta.

7. Delegerare och notifierare

Liknande presentationer


En presentation över ämnet: "7. Delegerare och notifierare"— Presentationens avskrift:

1 7. Delegerare och notifierare
Programmering i C# 7. Delegerare och notifierare

2 Delegerare Ett delegerarobjekt innehåller referenser till metoder
Metoderna kan anropas via delegerarobjektet Kan användas för callback, för eventlogik, och i flera andra designlösningar Programmering i C# - Kapitel 7

3 7.1 Anrop via delegerare class Services // illustrerar callback-logik { public static void Sort(object CollectionToSort, SortDelegate SortTwoObjects) while (…) if(SortTwoObjects(objA, objB)) … ; } SortTwoObjects är delegerarobjektet, associerat till någon metod Programmering i C# - Kapitel 7

4 Delegerartypen Delegerartypen deklareras med särskild syntax – ger klass härledd från Delegate Typen avgör vilka metoder som kan associeras Statiska, instansmetoder, samma klass, annan klass, objekt av valfri klass… delegate bool SortDelegate(object A, object B); Programmering i C# - Kapitel 7

5 Delegerarobjektet Objektet skapas med konstruktor som tar metodnamn som parameter! Används sedan som om det var en metod class MyCollection { public bool Compare(object o1, object o2) { … } } MyCollection coll = new MyCollection(); SortDelegate callback = new SortDelegate(coll.Compare); Services.Sort(coll, callback); Programmering i C# - Kapitel 7

6 Anrop till flera metoder
Delegerarobjekt är egentligen samlingar av referenser till metoder Delegate.Combine konkatenerar objekt Operatorn + gör samma sak Ett anrop via delegeraren blir ett anrop till samtliga metoder Sista anropets returvärde blir delegeraranropets returvärde (därför ofta void) Programmering i C# - Kapitel 7

7 Publicerare och prenumeranter
Annan design: delegerarobjektet som private fält i en klass En public Add-metod ger objekt av andra klasser möjlighet att lägga till referens Kallas ibland Publicerare-Prenumerant … eller event! Se kodexempel i boken! Programmering i C# - Kapitel 7

8 Anrop via notifierare Varför inte göra delegerarobjektet public?
Prenumeranter kan då påverka varandra! Lösning: event gör enbart += och -= synligt delegate void CallEveryone(); class Publisher { public event CallEveryone call = null; Programmering i C# - Kapitel 7

9 Parametrar Delegerartypen i viss mån standardiserad
Klassbiblioteket erbjuder EventHandler returtyp: void parametrar: object och EventArgs Första parametern identifierar avsändaren EventArgs tänkt som basklass Används ofta som tom parameter Programmering i C# - Kapitel 7


Ladda ner ppt "7. Delegerare och notifierare"

Liknande presentationer


Google-annonser