1 / 9

Programmering i C#

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.

gretel
Télécharger la présentation

Programmering i C#

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

More Related