Introduktion til Delegates og Event i C#

Enhver der arbejder med C# tænker helt automatisk i metoder og attributter, når der designes klasser. Med denne lille artikkel vil jeg gerne give dig et hurtigt indblik i Events og Delegates, så du fremadrettet også begynder at tænke i Events når du designer klasser.

Hvad er en Event

Event oversættes til dansk som en hændelse, altså noget der er sket. Det er også sådan du skal opfatte det. Du kan i din klasse angive at noget er sket:

  • en attribut har skiftet værdi,
  • en tærskel værdi er overskredet,
  • et kald til en metode er foretaget,

du kan sikkert komme på mere selv.

Implementering af Event.

Du angiver at din klasse stiller Events tilrådighed således:

public event BusinessObjectEventHandler OnEvent;

 

BusinessObjectEventHandler : navnet på den delegates der beskriver hvordan klienter abonnerer på din Event.

Event  : beskriver hvorfor eventen er opstået. Herunder er nogle eksempler.

OnChange ved ændringer af en attribut værdi.

OnTick ved ændring i tid

OnMaxReached ved opnåelse af tærskel værdi.

OnClick ved bruger interaktion med mus.

OnKeyPressed ved bruger interaktion med tastatur.

Angiv callback funktionen med en delegate

En delegate er interface definitionen til callback funktionen der aktiveres af din event.

public delegate void BusinessObjectEventHandler(object sender, EventArgs e)

Publisering af Event

Når en event har fundet sted skal den publiseres så alle der abonnerer på den kan foretage det de har implementeret i deres callback funktion.

F.eks. hvis jeg i min klasse har implementeret denne event,

public event BusinessObjectEventHandler OnChanged;

som skal publiseres når en attribut skifter værdi, sikrer jeg at det sker når attributten sættes.

 

private string _firstName;

public string firstName

{

           get {      return this._ firstName; }

set {
                      if (OnChanged != null)

                      OnChanged(this, new EventArgs());

           this._ firstName = value;

}

}

Abonnering på en Event

Den klient der instantierer klassen skal abonnere på eventen før det kommer til at ske noget.

Lad os sige at Eventen tilhører klassen Person. Man angiver at man gerne vil abonnere på eventen OnChanged ved at fortælle eventen hvilke callback metode der skal kaldes når event fyres af.

Herunder er der angivet to metoder der hver især skal kaldes, person_Onchanged_1, person_Onchanged_2.

class Person person = new Person();

person.OnChanged += new BusinessObjectEventHandler(person_Onchanged_1);

person.OnChanged += new BusinessObjectEventHandler(person_Onchanged_2);

private void person_Onchanged_1(object sender, EventArgs e){

           //do stuff//

}

 

private void person_Onchanged_2(object sender, EventArgs e){

//do stuff//

}

 

Denne event anvender EventArgs som ikke indeholder data. Det vil typisk være at foretrække at data sendes med i EventArgs, det gør det muligt for abonnenterne at foretage mere detaljerede valg baseret på aktuelle data.

 

Event med data

For at få data med når dit event fyres af, skal du lave en klasse der arver fra EventArgs

public class BusinessObjectEventArgs : EventArgs

{

           private string _oldname;

           private string _newname;

           private string _changedby;

public BusinessObjectEventArgs(

string oldname,

string newname,

string changedby)

{

                                 _oldname = oldname;

                                 _newname = newname;

_changedby = changedby;

}

           public string oldname{

get {

return _oldname;

}

}

           public string newname{

get {

return _ newname;

}

}

public string changedby{

get {

return _ changedby;

}

}

}

Det betyder så også at din delegate ser anderledes ud nu, da den nu anvender BusinessObjectEventArgs.

public delegate void BusinessObjectEventHandler(object sender, BusinessObjectEventArgs e)

I din klasse skal du sætte værdierne i din BusinessObjectEventArgs inden eventen fyres af.

private string _firstName;

public string firstName

{

           get {      return this._ firstName; }

set {
                      if (OnChanged != null)

{

                      OnChanged(

this,

new BusinessObjectEventArgs(

_firstname,

value, WindowsIdentity.GetCurrent().Name)

);

}

           this._ firstName = value;

}

}

Data er nu tilgængelige for callback funktionen via instansen e af BusinessObjectEventArgs.

private void i_OnChanged2(

object sender,

BusinessObjectEventArgs e)

{

           Print e.oldname;

Print e.newname;

Print e.Changedby;

}

Udgivet i .Net, C#, OOA, OOD, OOP, Udvikler, Underviser | Skriv en kommentar

2011/2 – 2011/3 IT-Henckel.dk

I mit eget udviklings miljø har jeg arbejdet med Hyper V på en 2008 Small business Server hvor jeg har etableret skabeloner som kan ”klikkes på” miljøet efter hånden som det er nødvendigt. Jeg har etableret et virtuelt 3 tier udviklings, test og prod miljø. Med hver deres seperate virtuelle netværk.

Der er installeret og konfiguret en team foundation server. Visual studio 2010 er opsat sammen med Test manager til automatiseret test. Hele miljøet kører på en SQL 2008 server.

Udgivet i Hyper V, IT-arkitekt, Uncategorized, Virtualisering | Kommentarer slået fra

2010/3 – 2011/2 Lokationschef Steria Århus

Lokationschef for Sterias kontor i Århus,
Teamleder for Security management afdeling,
Ressource ansvarlig,

Projektleder.

Projekter:virtualiserings projekt.

Projektleder for udvikling af forretningskoncept om IdM Hosting.

Projektleder i Region MidtJylland for IdM integration til Blueline.

Projektleder for udarbejdelse af tilbud til Sønderborg kommune (BID manager)

Projektleder for udarbejdelse af tilbud til Ballerup kommune (BID manager)

Har arbejdet med coaching af medarbejdere og ”Den Gode historie” samt implementering af vision, mison og værdier.

Udgivet i Coaching, Kodestandard, MS Excel, MS Word, Planning Poker, Projektleder, SRCUM, Teamleder, Teknisk projektledelse, UML, Use cases, Virtualisering, Visio, Visual Studio 2008, Værdsættende ledelse | Kommentarer slået fra

2009/06 – 2009/12 ATEA

JDH fungerede som teknisk projektleder i IndFak implementering.

JDH konfigurerede SharePoint liste til projektdeltagerne så estimater og forbrugt tid kunne registreres løbende.

Implementering af OIOUBL i Navision, og SQL databaser.

Udgivet i Coaching, MS Excel, MS Word, Planning Poker, Projektleder, SharePoint WSS 3.0, Teknisk projektledelse, Use cases, Visio, Værdsættende ledelse | Kommentarer slået fra

2009/06 – 2009/12 ATEA

JDH fungerede som udvikler på et dokumentations værktøj, der bidrager til at dokumentere aftaler om integrationer i komplekse miljøer mellem flere forretnings parter.

Windows applikationen har import funktion der kan importere XSD, XML og SQL database struktur (tabeller, felter, stored procedure).

Windows applikationen har rapporterings funktion der anvender Crystal Reports.

Applikationer er 3 delt med GUI (Windows Forms), Business lag, DAL/ database. Adgang til data sker via stored procedures.

Udgivet i .Net, C#, Crystal Reports, IT-arkitekt, Kodestandard, OOA, OOD, OOP, PDF, Perforce P4D, SQL, t-SQL, Teknisk projektledelse, Udvikler, UML, Use cases, Visual Studio 2008, Windows Forms, XML, XSD, XSLT | Kommentarer slået fra

2009/02 – 2009/05 HIN A/S

JDH installerer, konfigurer og tilpasser SharePoint løsning på Windows 2003 server miljø.

Installationen er en test installation, der skal anvendes til at lave en GAP analyse set i forhold til virksomhedens IT strategi.

Udgivet i Coaching, IT-arkitekt, SharePoint WSS 3.0, SQL, SQL Server Manager Studio, Værdsættende ledelse | Kommentarer slået fra

2009/03 – 2009/06 HIN A/S

JDH løser ad hoc opgaver for HIN A/S. Den første var en lille opgave, der skulle gøre det muligt for besøgende på HINOnline at give feedback om deres oplevelse op sitet.

Den næste opgaver var at gøre søge funktionen i produktkataloget anvendelig. Således at alle søge ord blev vægtet i søgningen så de bedste søgeresultater kunne vises øverst i listen af resultater. Oplevelsen skulle være som når man søger på Google.

Udgivet i .Net, ASP.Net, C#, Coaching, MS SQL Profiler, Navision, OOA, OOD, OOP, Perforce P4D, Projektleder, SQL, SQL Server Manager Studio, t-SQL, Udvikler, Use cases, VB.Net, VBScript, Værdsættende ledelse, XML | Kommentarer slået fra

2008/12 – 2009/02 DONG Energy

Til HUGIN projektet udviklede JDH en WCF service til at udtrække rapporter fra Business Object XR II i PDF format. Servicen sender rapporten til en fax, printer eller e-mail adresse afhængigt af modtagerens ønsker.

Servicen blev udviklet med særligt fokus på drift stabilitet. Dvs. at exception handling og garbage collection blev anvendt intensivt.

Endvidere udarbejdede han Windows Forms, WCF Services, Proxies og styring af klient konfiguration.

Udgivet i .Net, Business Object XR II, C#, Crystal Reports, FAX, Kodestandard, OOA, OOD, OOP, PDF, Perforce P4D, SMTP, SQL, SRCUM, t-SQL, Udvikler, UML, Use cases, Visual Studio 2008, WCF, Web Services (SOAP), Windows Forms, Windows Service, XML, XSLT | Kommentarer slået fra

2008/01 – 2008/11 AOF Favrskov

JDH underviste tre hold for AOF Favrskov.

Kurset “IT for begyndere” henvendte sig til personer ud nogen forudsætninger for anvendelse af en computer.

JDH udarbejdede selv undervisningsmaterialet som tog udgangs punkt i kursisternes ønsker og behov.

Udgivet i Coaching, MS Excel, MS Word, Technical Writer, Underviser, Værdsættende ledelse | Kommentarer slået fra

2008/04 – 2008/08 Center for Døve

Projektet var en analyse og kravspecificerings projekt.

Center for Døve ønskede et tilbud på en webportal der integrerede til deres eksisterende tolkebookingsystem. Webportalen giver døve hurtigere svar på om de kan få en tolk til en opgave.

JDH var tekniskprojektleder og analytiker i projektet.

JDH arrangerede og afholdt workshops med kunden hvor der med brainstorm blev identificeret ønsker og krav til løsningen. Disse krav blev organiseret i forretnings krav og løsningskrav. Usecases og forretningsflowdiagrammer blev anvendt til at visualisere løsningen.

Planning Poker blev anvendt til estimering og udviklings teamet blev inddraget direkte i estimeringsprocessen.

Analyse og kravspecificering var på 300 timer og endte ud med en projektplan, detaljerede krav og acceptkriterier til disse.

Projektet blev ledt efter PRINCE II, og QP som er KMD’s version af RUP.

JDH havde en tæt dialog med kunden og med KMD’s salgsafdeling.

Undervejs i projektet var det nødvendigt at erstatte den oprindelige analytiker med en anden. JDH valgte at tage rollen som analytiker ved siden af projektledelsen.

Udviklingsprojektet blev startet op i slutningen af august 2008 med deadline 1. februar 2009.

Udgivet i .Net, Coaching, IT-arkitekt, MS Word, OOA, OOD, OOP, PRINCE II, Projektleder, Teknisk projektledelse, UML, Use cases, Visio, Værdsættende ledelse | Kommentarer slået fra