Programavimas

Kaip dirbti su delegatais C #

Įgaliotasis yra tipui saugus funkcijų žymeklis, galintis nurodyti metodą, kuris turi tą patį parašą kaip ir įgaliotinis. Norėdami pasinaudoti įvykių ir atgalinio skambinimo metodais, galite pasinaudoti C # atstovų atstovų pranašumais. „Multicast“ delegatas yra tas, kuris gali nurodyti vieną ar kelis metodus, kurie turi identiškus parašus.

Suprasti delegatus C #

Iš esmės delegatas turi nuorodą į metodą ir tikslinį objektą, dėl kurio turėtų būti vadinamas metodas. C # atstovai yra panašūs į funkcijų rodykles C ++, tačiau C # atstovai yra saugūs. Galite perduoti metodus kaip parametrus delegatui, kad delegatas galėtų nurodyti metodą. Delegatai naudojami skambinimo metodams apibrėžti ir įvykių tvarkymui įgyvendinti, ir jie deklaruojami naudojant „delegate“ raktinį žodį. Galite paskelbti delegatą, kuris gali pasirodyti atskirai ar net įdėtas į klasę.

Naudojant delegatus yra trys žingsniai. Tai apima deklaravimą, greitinimą ir iškvietimą.

Delegato parašas atrodo taip:

perduoti rezultato tipo identifikatorių ([parametrai])

Šis teiginys parodo, kaip galite paskelbti delegatą.

viešasis delegatas negalioja „MyDelegate“ (eilutės tekstas);

Kaip matote aukščiau pateiktame sakinyje, įgaliotojo vardas yra „MyDelegate“, jo grąžinimo tipas yra „void“ ir jis priima eilutės objektą kaip argumentą. Tai reiškia, kad įgaliotasis „MyDelegate“ gali nurodyti metodą, kuris turi identišką parašą. Vis dėlto tai tik deklaracija - prieš naudodamiesi delegatu, turite jį iškviesti. Kitas pateiktas teiginys parodo, kaip galite išaiškinti aukščiau deklaruotą delegatą.

„MyDelegate“ d = naujas „MyDelegate“ (ShowText);

Paskelbę ir išpardavę delegatą, galite pasinaudoti metodu, kurį lengvai nurodo delegatas.

d („Sveikas pasaulis ...“);

Čia d yra deleguota instancija

Taip pat galite pasinaudoti metodu, į kurį nurodo įgaliotojo egzempliorius, naudodamas metodą „Invoke ()“ delegato egzemplioriuje, kaip parodyta žemiau.

d.Invoke („Sveikas pasaulis ...“);

Jei turite metodą, kuris priima du skaičius, ir norite juos pridėti ir grąžinti dviejų skaičių sumą, galite naudoti delegatą, kad išsaugotumėte metodo grąžinimo vertę, kaip parodyta toliau pateiktame kodo fragmente.

int rezultatas = d (12, 15);

Čia yra visas jūsų kodo sąrašas.

naudojant sistemą;

vardų srities delegatai

{

viešasis delegatas int „MyDelegate“ (int x, int y);

klasės programa

    {

statinis int suma (int x, int y)

        {

grįžti x + y;

        }

statinis negaliojantis Pagrindinis ()

        {

„MyDelegate“ d = naujas „MyDelegate“ (suma);

int rezultatas = d. Iššaukimas (12, 15);

Console.WriteLine (rezultatas);

Pultas.ReadLine ();

        }

    }

Delegatai veiksmuose C #

Čia yra visas kodų sąrašas.

naudojant sistemą;

vardų srities delegatai

{

viešasis delegatas negalioja „MyDelegate“ (eilutės tekstas);

klasės programa

    {

public static void ShowText (eilutės tekstas)

        {

Console.WriteLine (tekstas);

        }

statinis negaliojantis Pagrindinis ()

        {

„MyDelegate“ d = naujas „MyDelegate“ (ShowText);

d („Sveikas pasaulis ...“);

Pultas.ReadLine ();

        }

    }

}

Atminkite, kad naudodami + operatorių galite priskirti kelis objektus delegato egzemplioriui, kuris paverčia delegatą daugiaadresiu delegatu. Taip pat galite sujungti deleguotus egzempliorius naudodami statinį metodą „Derinti“.

Klaida palaiko sąrašą (dar vadinamą kvietimų sąrašu), kad galėtų atlikti kelis metodus. Šis kodų sąrašas parodo, kaip galite naudoti „Combine“ () metodą, kad sujungtumėte kelis deleguotų egzempliorių.

myDelegate d1 = naujas myDelegate (1 metodas);

myDelegate d2 = naujas myDelegate (2 metodas);

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

multicastDelegate.Invoke ();

Delegatas, galintis nurodyti kelis metodus, yra žinomas kaip daugiaadresio perdavimo delegatas. Atminkite, kad deleguotų egzempliorių negalima keisti. Taigi, sujungus delegatus arba atėmus vieną delegatų egzempliorių iš sąrašo, sukuriamas naujas delegatų egzempliorius, kuris atspindi atnaujintą arba naują taikomų objektų ar metodų, kuriuos reikia naudoti, sąrašą.

Daugialypio perdavimo delegatai veikia C #

Šis kodų sąrašas iliustruoja daugiaadresio perdavimo delegatą. Atkreipkite dėmesį į delegato egzemplioriaus naudojimą: Čia mes naudojome operatorių + = priskirti delegatą keliems metodams, turintiems identiškus parašus.

naudojant sistemą;

vardų srities delegatai

{

viešasis delegatas negalioja „MyDelegate“ ();

klasės programa

    {

public static void1 metodas ()

        {

Console.WriteLine („Inside Method1 ...“);

        }

public static void2 metodas ()

        {

Console.WriteLine („Vidinis metodas2 ...“);

        }

statinis negaliojantis Pagrindinis ()

        {

„MyDelegate“ d = nulis;

d + = metodas1;

d + = 2 metodas;

d. Iškviesti ();

Pultas.ReadLine ();

        }

    }

}

Delegatai idealiai tinka įgyvendinti įvykių programavimą. Delegatui nereikia žinoti objekto, į kurį jis nukreiptas, klasės. Viskas, ką ji turi žinoti, yra metodo, į kurį jis nurodys, parašas. Tinkamas delegatų naudojimas gali skatinti jūsų kodo pakartotinį naudojimą ir dizaino lankstumą. Norėdami gauti daugiau informacijos apie delegatus, galite ieškoti „Microsoft“ internetinėje dokumentacijoje.