9
Programmering i C# 7. Delegerare och notifierare

Programmering i C#

  • 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

Page 1: Programmering i C#

Programmering i C#

7. Delegerare och notifierare

Page 2: Programmering i C#

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

Page 3: Programmering i C#

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)) … ;}…

}

Page 4: Programmering i C#

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);

Page 5: Programmering i C#

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);

Page 6: Programmering i C#

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)

Page 7: Programmering i C#

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!

Page 8: Programmering i C#

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;…

Page 9: Programmering i C#

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