Programiranje

Kako delati z delegati v C #

Delegat je kazalnik funkcije, varen za tip, ki se lahko sklicuje na metodo, ki ima enak podpis kot delegat. Delegate v C # lahko izkoristite za izvajanje dogodkov in načinov povratnega klica. Delegat večkastnega pošiljanja je tisti, ki lahko kaže na eno ali več metod z enakimi podpisi.

Razumevanje delegatov v jeziku C #

V bistvu se delegat sklicuje na metodo in tudi na ciljni objekt, na katerem bi morala biti metoda poklicana. Delegati v C # so podobni kazalcem na funkcije v C ++, vendar so delegati C # varni za tip. Metode lahko posredujete kot parametre pooblaščencu, da omogočite, da delegat kaže na metodo. Delegati se uporabljajo za opredelitev načinov povratnega klica in izvajanje obdelave dogodkov, pri čemer so navedeni z uporabo ključne besede “delegat”. Lahko prijavite delegata, ki se lahko pojavi sam ali celo ugnezden v razredu.

V uporabi delegatov so trije koraki. Sem spadajo izjava, instancacija in klic.

Podpis pooblaščenca je videti takole:

delegiraj identifikator vrste rezultata ([parametri])

Naslednja izjava prikazuje, kako lahko razglasite pooblaščenca.

javni delegat void MyDelegate (besedilo niza);

Kot lahko vidite v zgornji izjavi, je ime delegata »MyDelegate«, ima vrnitev »void« in kot argument sprejme objekt niza. To pomeni, da lahko pooblaščenec MyDelegate kaže na metodo z enakim podpisom. To pa je le izjava - delegat morate ustvariti, preden ga lahko uporabite. Naslednja izjava prikazuje, kako lahko ustvarite primerek zgoraj navedenega delegata.

MyDelegate d = nov MyDelegate (ShowText);

Ko ste pooblaščenca razglasili in ustvarili z njim, lahko enostavno prikličete metodo, na katero opozori delegat.

d ("Pozdravljen svet ...");

Tu je d delegat primerka

Prav tako lahko prikličete metodo, na katero opozori pooblaščeni primerek, z uporabo metode Invoke () na primerku pooblaščenca, kot je prikazano spodaj.

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

Če imate metodo, ki sprejema dve številki in jih želite dodati in vrniti vsoto obeh številk, lahko z delegatom shranite vrnjeno vrednost metode, kot je prikazano v spodnjem delčku kode.

int rezultat = d (12, 15);

Tu je popoln seznam kod za vašo referenco.

z uporabo sistema;

Delegati

{

javni delegat int MyDelegate (int x, int y);

razredni program

    {

statična vsota int (int x, int y)

        {

vrnitev x + y;

        }

statična praznina Main ()

        {

MyDelegate d = nov MyDelegate (vsota);

int rezultat = d.Prikliči (12, 15);

Console.WriteLine (rezultat);

Console.ReadLine ();

        }

    }

Delegati v akciji v C #

Tu je popoln seznam kod.

z uporabo sistema;

Delegati

{

javni delegat void MyDelegate (besedilo niza);

razredni program

    {

javna statična void ShowText (besedilo niza)

        {

Console.WriteLine (besedilo);

        }

statična praznina Main ()

        {

MyDelegate d = nov MyDelegate (ShowText);

d ("Pozdravljen svet ...");

Console.ReadLine ();

        }

    }

}

Upoštevajte, da lahko primerku delegata dodelite več predmetov z operaterjem +, zaradi česar je delegat delegat večkratnega pošiljanja. Primerke delegatov lahko kombinirate tudi s statično metodo Combine.

Izvajalno okolje interno vzdržuje seznam (imenovan tudi klicni seznam) za izvajanje več metod. Naslednji seznam kod prikazuje, kako lahko z metodo Combine () kombinirate več primerkov delegatov.

myDelegate d1 = nov myDelegate (metoda1);

myDelegate d2 = nov myDelegate (metoda2);

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

multicastDelegate.Invoke ();

Delegat, ki lahko kaže na več metod, je znan kot delegat večkastnega pošiljanja. Upoštevajte, da so primerki delegatov nespremenljivi. Ko združite delegate ali odštejete en primerek delegata s seznama, se ustvari nov primerek delegata, ki predstavlja posodobljeni ali novi seznam ciljev ali metod, ki jih je treba priklicati.

Delegati multicast v akciji v C #

Naslednji seznam kod ponazarja pooblaščenca za multicast. Upoštevajte uporabo primerka delegata: Tu smo uporabili operater + = za dodelitev delegata več načinom, ki imajo enake podpise.

z uporabo sistema;

Delegati

{

javni delegat void MyDelegate ();

razredni program

    {

javna statična praznina Method1 ()

        {

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

        }

javna statična praznina Method2 ()

        {

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

        }

statična praznina Main ()

        {

MyDelegate d = null;

d + = metoda1;

d + = metoda2;

d.Prikliči ();

Console.ReadLine ();

        }

    }

}

Delegati so idealni za izvajanje programov, ki jih vodijo dogodki. Delegatu ni treba poznati razreda predmeta, na katerega se nanaša. Vedeti mora le podpis metode, na katero bi usmerila. Pravilna uporaba delegatov lahko spodbudi ponovno uporabo vaše kode in prilagodljivost vaših načrtov. Za več informacij o delegatih se lahko obrnete na Microsoftovo spletno dokumentacijo.

$config[zx-auto] not found$config[zx-overlay] not found