Avatar billede krak Nybegynder
07. januar 2004 - 12:40 Der er 8 kommentarer og
2 løsninger

Delegate: Hvad er det?

Er der nogen, der på simpelt dansk kan forklare hvad pointen med delegate er i C#? (skal snart til eksamen)

Jeg har fornemmet at det har noget med eventhandlers at gøre, men jeg har en ret dårlig bog....

Mange tak!
Avatar billede wisen Nybegynder
07. januar 2004 - 12:43 #1
En delegate er i princippet en function-pointer - altså en pegepind på en funktion som man kan kalde
Avatar billede wisen Nybegynder
07. januar 2004 - 12:45 #2
.. det er rigtigt at de bl.a. benyttes i forbindelse med events - når man hooker sig på et event udleverer man en pegepind til den metode man gerne vil have bliver kaldt i forbindelse med af eventet fyres a'
Avatar billede krak Nybegynder
07. januar 2004 - 12:49 #3
Dvs hvis jeg har en eventhandler der ser sådan ud:

this.knap2.Click += new System.EventHandler(this.knap2_Click);
           
public void knap2_Click(object sender, System.EventArgs e)
{
    // udfør kode
}

Hvor ligger "pegepinden" så henne?
Avatar billede wisen Nybegynder
07. januar 2004 - 12:51 #4
<this.knap2_Click> _er_ pegepinden eg. den funktion du gerne vil have kaldt i forbindelse med at man trykker på knappen.
Avatar billede sekhmet_ds Nybegynder
07. januar 2004 - 12:52 #5
Hvis du deklarerer en delegate, f.eks. med:
  public delegate void Test(int i);

Så har du nu en funktions-pointer type, hvilket vil sige at hvis du har en funktion der overholder de krav du har stillet til delegate typen Test, f.eks.:

public void Test1(int i) {
System.Out.PrintLine(i);
}

så kan du instantiere en variable, af typen Test, til at indeholde en reference til Test1 metoden, f.eks.:

private Test funcPointer = new Test(Test1);

Når du så ønsker at kalde Test1, gemt i funcPointer, kan du gøre det som normalt med:

funcPointer(10);

Og Test1 bliver så udført.

Det er meget oplagt at bruge dette hvis du ønsker at delegere en opgave ud til en anden metode, men stadig vil have mulighed for at kunne skifte den der varetager opgaven ud runtime. Så kan man i stedet for lave kræve at et objekt skal implementere et interface der indeholder en metode du specificere bare angive hvordan funktionen skal se ud og så lade objektet skifte func-pointeren ud.
Avatar billede krak Nybegynder
07. januar 2004 - 12:53 #6
Kan man så sige, at "Delegate" er et objekt, der peger på den metode, der skal med som parameter?

Dvs at man "snyder" C#'s forbud mod at kalde en metode med en metode som parameter?
Avatar billede wisen Nybegynder
07. januar 2004 - 13:12 #7
.. smider lige et svar :)
Avatar billede krak Nybegynder
07. januar 2004 - 13:17 #8
ok, men vil du ikke lige svare, om jeg har forstået det korrekt, sådan som jeg nævner det i min seneste kommentar?
Avatar billede sekhmet_ds Nybegynder
07. januar 2004 - 13:19 #9
Teknisk set er det .NET der forbyder at man giver funktions pointere med direkte, men det er jo sådan set lige meget.

Og .NET forbyder det jo sådan set heller ikke, det her er bare måden at gøre det på. Men pointen er mere at det ikke bare er til at give funktioner med som argumenter det er brugbart.
Avatar billede krak Nybegynder
07. januar 2004 - 13:25 #10
ok, tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester