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