Upload
gretel
View
29
Download
0
Embed Size (px)
DESCRIPTION
Programmering i C#. 7. Delegerare och notifierare. 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. 7.1 Anrop via delegerare. - PowerPoint PPT Presentation
Citation preview
Programmering i C#
7. Delegerare och notifierare
Programmering i C# - Kapitel 72
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 73
7.1 Anrop via delegerare
SortTwoObjects är delegerarobjektet, associerat till någon metod
class Services // illustrerar callback-logik{
public static void Sort(object CollectionToSort,SortDelegate SortTwoObjects)
{while (…)
if(SortTwoObjects(objA, objB)) … ;}…
}
Programmering i C# - Kapitel 74
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 75
Delegerarobjektet
Objektet skapas med konstruktor som tar metodnamn som parameter!
Används sedan som om det var en metodclass 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 76
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 77
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 78
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 79
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