Programmering

Sådan arbejder du med delegerede i C #

En delegeret er en typesikker funktionsmarkør, der kan henvise til en metode, der har den samme signatur som delegatens. Du kan drage fordel af delegerede i C # til at implementere begivenheder og tilbagekaldsmetoder. En multicast-delegat er en, der kan pege på en eller flere metoder, der har identiske signaturer.

Forståelse af delegerede i C #

I det væsentlige har en delegeret en henvisning til en metode og også til det målobjekt, som metoden skal kaldes på. Delegater i C # svarer til funktionsmarkører i C ++, men C # delegater er typesikre. Du kan videregive metoder som parametre til en delegeret, så delegaten kan pege på metoden. Delegater bruges til at definere tilbagekaldsmetoder og implementere håndtering af begivenheder, og de erklæres ved hjælp af "delegeret" nøgleordet. Du kan erklære en delegeret, der kan vises alene eller endda indlejret i en klasse.

Der er tre trin i brugen af ​​delegerede. Disse inkluderer erklæring, instantiering og påkaldelse.

En delegerets underskrift ser sådan ud:

delegere resultat-type-id ([parametre])

Følgende erklæring viser, hvordan du kan erklære en delegeret.

offentlig delegeret ugyldigt MyDelegate (strengtekst);

Som du kan se i ovenstående udsagn, er delegatnavnet "MyDelegate", det har en returtype "ugyldigt" og det accepterer et strengobjekt som et argument. Dette indebærer, at den delegerede MyDelegate kan pege på en metode, der har en identisk signatur. Dette er dog kun en erklæring - du skal starte en delegeret, inden du kan bruge den. Den næste erklæring viser, hvordan du kan instantiere den ovennævnte delegerede.

MyDelegate d = ny MyDelegate (ShowText);

Når du har erklæret og instantificeret delegaten, kan du let påberåbe den metode, som delegaten peger på.

d ("Hej verden ...");

Her er d den delegerede instans

Du kan også påberåbe den metode, som den delegerede instans peger på ved hjælp af Invoke () -metoden på den delegerede instans som vist nedenfor.

d.Invoke ("Hello World ...");

Hvis du har en metode, der accepterer to numre, og du vil tilføje dem og returnere summen af ​​de to numre, kan du bruge en delegeret til at gemme metodens returværdi som vist i kodestykket nedenfor.

int-resultat = d (12, 15);

Her er den komplette kodeliste til din reference.

ved hjælp af System;

navneområde delegerede

{

offentlig delegeret int MyDelegate (int x, int y);

klasse Program

    {

statisk int Sum (int x, int y)

        {

returnere x + y;

        }

statisk tomrum Main ()

        {

MyDelegate d = ny MyDelegate (Sum);

int resultat = d.Invoke (12, 15);

Console.WriteLine (resultat);

Console.ReadLine ();

        }

    }

Delegerede i aktion i C #

Her er den komplette kodeliste.

ved hjælp af System;

navneområde delegerede

{

offentlig delegeret ugyldigt MyDelegate (strengtekst);

klasse Program

    {

offentlig statisk ugyldighed ShowText (strengtekst)

        {

Console.WriteLine (tekst);

        }

statisk tomrum Main ()

        {

MyDelegate d = ny MyDelegate (ShowText);

d ("Hej verden ...");

Console.ReadLine ();

        }

    }

}

Bemærk, at du kan tildele flere objekter til en delegeret instans ved hjælp af + -operatoren, hvilket gør delegaten til en multicasting-delegat. Du kan også kombinere delegerede forekomster ved hjælp af den statiske metode Kombiner.

Runtime opretholder en liste (også kaldet Invocation-liste) internt for at udføre flere metoder. Følgende kodeliste viser, hvordan du kan bruge metoden Combine () til at kombinere flere delegerede forekomster.

myDelegate d1 = ny myDelegate (Metode1);

myDelegate d2 = ny myDelegate (Metode2);

myDelegate multicastDelegate = (myDelegate) Delegate.Combine (d1, d2);

multicastDelegate.Invoke ();

En delegeret, der kan pege på flere metoder, er kendt som en multicast-delegat. Bemærk, at delegerede forekomster er uforanderlige. Så når du kombinerer delegerede eller trækker en delegeret instans fra listen, oprettes en ny delegeret instans til at repræsentere den opdaterede eller nye liste over de mål eller metoder, der skal påberåbes.

Multicast-delegerede i aktion i C #

Følgende kodeliste illustrerer en multicast-delegat. Bemærk brugen af ​​den delegerede instans: Her har vi brugt + = operatoren til at tildele delegaten til flere metoder, der har identiske signaturer.

ved hjælp af System;

navneområde delegerede

{

offentlig delegeret ugyldigt MyDelegate ();

klasse Program

    {

offentlig statisk ugyldig Metode1 ()

        {

Console.WriteLine ("Inside Method1 ...");

        }

offentlig statisk ugyldig Metode2 ()

        {

Console.WriteLine ("Inside Method2 ...");

        }

statisk tomrum Main ()

        {

MyDelegate d = null;

d + = metode 1;

d + = metode 2;

d.Invoke ();

Console.ReadLine ();

        }

    }

}

Delegater er ideel til implementering af begivenhedsdrevet programmering. En delegeret behøver ikke at kende klassen for det objekt, som den henviser til. Alt, hvad det behøver at vide, er underskriften på den metode, som den ville pege på. Korrekt brug af delegerede kan fremme genanvendelighed i din kode og fleksibilitet i dine designs. Du kan se Microsofts online dokumentation for at få flere oplysninger om delegerede.