C # delegatai pamoka ir pavyzdys

C # delegatai leidžia naudoti metodą kaip objektas. Tai reiškia, kad jūs galėsite praeiti metodą kaip argumento kitu būdu,. Tai daroma nurodydamas delegatą į metodą, ir yra išlaikęs delegatą kaip argumentą. Tada naudojant delegatą galite skambinti metodą, kad delegatas yra nukreipta į.

Naudingo dalis delegatų yra toks metodas gali būti perduodama iš vieno objekto į kitą.

Kaip žinome metodas yra tam tikrų veiksmų, kad objektas gali padaryti tipas. Kad veiksmai būtų įgyvendinti paties metodo apibrėžtis per klasės deklaruojama būdas. Su delegatas metodo arba metodo dalį įgyvendinimas esančius klasės, gali būti deleguota į kitą klasę.

čia, mes turime paprastą pavyzdį suprasti delegatų. Turime grojaraštį klasę, kuri leidžia pridėti dainas į grojaraštį. Grojaraščio klasė suteikia metodą, vadinamą ShowPlaylist kad spausdina visas dainas į grojaraštį.

klasė grojaraščio
{
     // code eliminated for brevity
     
    public void ShowPlaylist()
    {
          kiekvienam (Daina daina this.list)
          {
               Console.WriteLine("Dainos pavadinimas: {0}". dainos pavadinimas);       
          }
    }

}

Naudojant grojaraščio klasė ShowPlaylist būdą gausite visą grojaraštį spausdintą.

Leiskite pristatyti delegatus į grojaraštį klasės. Naudojant delegatą leis grojaraščio klasės vartotojų įgyvendinti logika rodo grojaraštį.

Čia mes paskelbti delegatą į grojaraštį klasės, kurios turi dainuoti parametras tipo daina

klasė grojaraščio
{
     // kodas panaikintos glaustumo
     // delegate for showing song
     public delegate bool ProcessPlaylistDelegate(daina daina);

...

Mums reikia reguliuoti ShowPlayList() metodas naudoti ProcessPlaylistDelegate. ShowPlayList metodas laikosi ProcessPlaylistDelegate kaip parametras. Dabar mes galime apdoroti grojaraštį prieš jį spausdinant.

        //show the playlist using another function attached to ProcessPlaylistDelegate
        public void ShowPlaylist(ProcessPlaylistDelegate processPlaylist)
        {
            kiekvienam (Daina daina this.list)
            {
                jei (processPlaylist(daina))
                {
                    Console.WriteLine("Dainos pavadinimas: {0}", dainos pavadinimas);
                }
            }
        }

Dabar ši klasė gali pavesti bet koks perdirbimas į kitą metodą, kaip ilgai, kaip grįžimas tipo ir parametrų tipas atitinka delegatą. Žemiau Programos klasė naudojant grojaraštį klasę. Mes pareiškiame naują Playlist.ProcessPlaylistDelegate ir tada mes pritvirtinti getMp3Songs į delegatas.

    klasės programa
    {
        static void main(styga[] args)
        {
             Grojaraštis playlist1 = naują grojaraštį();

             //add some songs to the playlist

             //use the delegate to process the list before it is printed on the screen
             playlist1.ShowPlaylist(Naujas Playlist.ProcessPlaylistDelegate(GetMp3Songs));
        }

  }

Žemiau yra getMp3Songs metodas apibrėžimas. Šis metodas grąžina tik mp3 dainas. Todėl ShowPlaylist bus ony spausdinti mp3 dainas.

        public static bool GetMp3Songs(daina daina)
        {
            //more logic goes here
            return (song.Format == "MP3");
        }

Delegatų galia atsitinka, kai mes gali apdoroti grojaraštį skirtingai nereikia liesti grojaraštį klasę. Žemiau skelbiame 2 kiti metodai, programos klasės.

public static bool GetCdSongs(daina daina)
 {
 //more logic goes here
 return (song.Format == "CD");
 }

public static bool GetAllSongs(daina daina)
 {
 //more logic goes here
 return true;
 }

Dabar mes tiesiog reikia pridėti jų į delegatų pagrindinis metodas. Šie metodai grojaraštį bus apdoroti skirtingai. Pirmasis metodas apima tik cd dainas, o antrasis metodas apims visas dainas. Tai tik paprastas pavyzdys, bet mes galime pridėti kaip daug apdorojimą, kaip mes reikalauti nereikia liesti klasės grojaraštį.

            playlist1.ShowPlaylist(Naujas Playlist.ProcessPlaylistDelegate(GetCdSongs));

            playlist1.ShowPlaylist(Naujas Playlist.ProcessPlaylistDelegate(GetAllSongs));


Parsisiųsti