C # edustajat opetusohjelma ja esimerkki

C # edustajat voidaan käyttää menetelmää, kuten objektin. Tämä tarkoittaa sitä, että voit siirtää menetelmä argumenttina muulla menetelmällä. Tämä tapahtuu osoittamalla edustajaksi menetelmä ja kulkee edustaja argumenttina. Sitten käyttämällä edustaja voit kutsua menetelmää että edustaja on osoittaa.

Hyödyllinen osa edustajia on niin menetelmä voidaan siirtää objektista toiseen.

Kuten tiedämme menetelmä vastaa noin tyyppisiä toimia esine voi tehdä. Että toiminta on toteutettu menetelmässä määritelmän itse luokan sisällä menetelmää julistetaan. Kanssa edustaja toteuttamista menetelmää tai osa menetelmän sisältyvät luokkaan, voidaan siirtää toiseen luokkaan.

Tässä, meillä on yksinkertainen esimerkki ymmärtää valtuutettujen. Meillä ei ole soittolistaa luokka, jonka avulla lisätä kappaleita soittolistalle. Toistoluettelosta luokka tarjoaa menetelmän nimeltä ShowPlaylist että tulostaa kaikki soittolistan kappaleet.

luokan Playlist
{
     // code eliminated for brevity
     
    public void ShowPlaylist()
    {
          jokaiselle (Song in this.list)
          {
               Console.WriteLine("Laulun nimi: {0}". laulun nimi);       
          }
    }

}

Käyttäminen Toistoluettelo luokan ShowPlaylist menetelmä saada koko soittolistan painetun.

Seuraavaksi perehdymme valtuutettuja toistoluetteloon luokkaan. Käyttämällä edustaja mahdollistaa kuluttajalle, että toistoluettelon luokan toteuttaa logiikan, joka esittää soittolistan.

Täällä me julistamme valtuutettuna soittolistan luokka, joka on laulaa parametrin tyypin Song

luokan Playlist
{
     // koodi poistetaan tilan säästämiseksi
     // delegate for showing song
     public delegate bool ProcessPlaylistDelegate(Song);

...

Meidän täytyy säätää ShowPlayList() menetelmä käyttää ProcessPlaylistDelegate. ShowPlayList menetelmä vie ProcessPlaylistDelegate parametrina. Nyt voimme käsitellä toistoluettelon ennen sen tulostamista.

        //show the playlist using another function attached to ProcessPlaylistDelegate
        public void ShowPlaylist(ProcessPlaylistDelegate processPlaylist)
        {
            jokaiselle (Song in this.list)
            {
                jos (processPlaylist(laulu))
                {
                    Console.WriteLine("Laulun nimi: {0}", laulun nimi);
                }
            }
        }

Nyt tämä luokka voi delegoida mahdollisen käsittelyn toinen menetelmä kunhan palautuva ja parametri tyyppi vastaa valtuutettuna. Alla Ohjelman luokka käyttää toistoluetteloon luokka. Me julistaa uuden Playlist.ProcessPlaylistDelegate ja sitten liitettävän getMp3Songs sen edustajan.

    luokan ohjelma
    {
        void Main(jono[] args)
        {
             Soittolistan playlist1 = uusi soittolista();

             //add some songs to the playlist

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

  }

Alla on getMp3Songs menetelmä määritelmä. Tämä menetelmä vain palauttaa MP3-kappaleita. Siksi ShowPlaylist tulee ONY tulostaa MP3-kappaleita.

        julkinen staattinen bool GetMp3Songs(Song)
        {
            //more logic goes here
            return (song.Format == "mp3");
        }

Teho valtuutettujen tapahtuu, kun voimme käsitellä soittolistan eri koskematta toistoluettelon luokka. Alla me julistamme 2 muita menetelmiä ohjelmaan luokassa.

julkinen staattinen bool GetCdSongs(Song)
 {
 //more logic goes here
 return (song.Format == "CD");
 }

julkinen staattinen bool GetAllSongs(Song)
 {
 //more logic goes here
 return true;
 }

Nyt meidän täytyy vain liittää nämä edustajat Main menetelmässä. Nämä menetelmät käsittelee soittolistan eri. Ensimmäinen menetelmä sisältää vain CD-levyiltä ja toinen menetelmä sisältää kaikki kappaleet. Tämä on vain yksinkertainen esimerkki, mutta voimme lisätä niin paljon prosessoritehoa kuin vaadimme koskematta luokan Soittolista.

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

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


Lataa

Tunnisteet: