Programmēšana

Kā strādāt ar delegātiem C #

Delegāts ir droša tipa funkciju rādītājs, kas var atsaukties uz metodi, kurai ir tāds pats paraksts kā delegātam. Varat izmantot C # delegātu priekšrocības, lai ieviestu notikumus un atzvanīšanas metodes. Multiraides delegāts ir tāds, kurš var norādīt uz vienu vai vairākām metodēm, kurām ir identiski paraksti.

Izpratne par delegātiem C #

Būtībā delegātam ir atsauce uz metodi un arī uz mērķa objektu, uz kuru metode jāizsauc. Delegāti C # ir līdzīgi funkciju rādītājiem C ++, bet C # delegāti ir tipam droši. Jūs varat nodot metodes kā parametrus delegātam, lai ļautu delegātam norādīt uz metodi. Delegāti tiek izmantoti, lai definētu atzvanīšanas metodes un ieviestu notikumu apstrādi, un tie tiek deklarēti, izmantojot atslēgvārdu “delegate”. Jūs varat pasludināt delegātu, kurš var parādīties pats vai pat ligzdot klases iekšienē.

Delegātu izmantošanā ir trīs darbības. Tie ietver deklarēšanu, eksponēšanu un piesaukšanu.

Delegāta paraksts izskatās šādi:

deleģēt rezultāta tipa identifikatoru ([parametri])

Šis paziņojums parāda, kā jūs varat deklarēt delegātu.

public delegate void MyDelegate (virknes teksts);

Kā redzat iepriekš minētajā paziņojumā, delegāta nosaukums ir “MyDelegate”, tā atgriešanās veids ir “void”, un tas kā virkni pieņem virknes objektu. Tas nozīmē, ka deleģētais MyDelegate var norādīt uz metodi, kurai ir identisks paraksts. Tomēr tā ir tikai deklarācija - pirms lietojat, jums ir jāpiesaista delegāts. Nākamais paziņojums parāda, kā jūs varat instantificēt iepriekš deklarēto delegātu.

MyDelegate d = jauns MyDelegate (ShowText);

Kad esat paziņojis un saīsinājis delegātu, varat atsaukties uz metodi, uz kuru delegāts norāda viegli.

d ("Sveika pasaule ...");

Šeit d ir delegāta instance

Varat arī izsaukt metodi, uz kuru norāda deleģētā instance, izmantojot metodi Invoke () deleģētajā instancē, kā parādīts zemāk.

d.Invoke ("Sveika pasaule ...");

Ja jums ir metode, kas pieņem divus skaitļus, un vēlaties tos pievienot un atgriezt divu skaitļu summu, varat izmantot delegātu, lai saglabātu metodes atgriešanās vērtību, kā parādīts tālāk sniegtajā koda fragmentā.

int rezultāts = d (12, 15);

Šeit ir pilns kodu saraksts jūsu atsaucei.

izmantojot sistēmu;

nosaukumvieta Delegāti

{

publiskais delegāts int MyDelegate (int x, int y);

klases programma

    {

statiskā int summa (int x, int y)

        {

atgriešanās x + y;

        }

static void Main ()

        {

MyDelegate d = jauns MyDelegate (summa);

int rezultāts = d. Izsaukt (12, 15);

Console.WriteLine (rezultāts);

Console.ReadLine ();

        }

    }

Delegāti darbībā C #

Šeit ir pilns kodu saraksts.

izmantojot sistēmu;

nosaukumvieta Delegāti

{

public delegate void MyDelegate (virknes teksts);

klases programma

    {

public static void ShowText (virknes teksts)

        {

Console.WriteLine (teksts);

        }

static void Main ()

        {

MyDelegate d = jauns MyDelegate (ShowText);

d ("Sveika pasaule ...");

Console.ReadLine ();

        }

    }

}

Ņemiet vērā, ka varat piešķirt vairākus objektus delegāta instancei, izmantojot operatoru +, kas padara delegātu par multiziņu delegātu. Jūs varat arī apvienot deleģētos gadījumus, izmantojot statisko metodi Apvienot.

Izpildes laiks iekšēji uztur sarakstu (saukts arī par izsaukumu sarakstu), lai izpildītu vairākas metodes. Šis kodu saraksts parāda, kā jūs varat izmantot metodi Combine (), lai apvienotu vairākus delegātu gadījumus.

myDelegate d1 = jauns myDelegate (1. metode);

myDelegate d2 = jauns myDelegate (2. metode);

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

multicastDelegate.Invoke ();

Delegāts, kurš var norādīt uz vairākām metodēm, ir pazīstams kā multiraides delegāts. Ņemiet vērā, ka deleģētie gadījumi nav maināmi. Tātad, apvienojot delegātus vai no saraksta atņemot vienu delegātu instanci, tiek izveidots jauns delegātu gadījums, kas pārstāv atjaunināto vai jauno izmantojamo mērķu vai metožu sarakstu.

Multiraides delegāti darbībā C #

Šis kodu saraksts ilustrē multiraides delegātu. Ievērojiet deleģētās instances lietojumu: šeit mēs izmantojām operatoru + =, lai deleģētu piešķirtu vairākām metodēm, kurām ir identiski paraksti.

izmantojot sistēmu;

nosaukumvieta Delegāti

{

publiskais deleģents anulē MyDelegate ();

klases programma

    {

public static void Method1 ()

        {

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

        }

public static void2. metode ()

        {

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

        }

static void Main ()

        {

MyDelegate d = null;

d + = 1. metode;

d + = 2. metode;

d. Izsaukt ();

Console.ReadLine ();

        }

    }

}

Delegāti ir ideāli piemēroti pasākumu virzītas programmēšanas ieviešanai. Delegātam nav jāzina tā objekta klase, uz kuru tas attiecas. Viss, kas tam jāzina, ir metodes, uz kuru tā norādīs, paraksts. Pareiza delegātu izmantošana var veicināt koda atkārtotu izmantošanu un dizaina elastību. Plašāku informāciju par delegātiem varat skatīt Microsoft tiešsaistes dokumentācijā.

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