C # delegáti tutorial a příklad

C # delegátů umožňuje použít metodu jako objekt. To znamená, že jste schopni předat metodu jako argument pro jinou metodou. To se provádí tím, že směřuje delegáta způsobu a složení delegáta jako argument. Pak pomocí delegáta jste schopni volat metodu, že delegát ukazující na.

Užitečná část delegátů je tak způsob může být přenesen z jednoho objektu na jiný.

Jak je známe způsob představuje určitý typ akce, které objekt může dělat. Tato žaloba je implementován v definici metody sám ve třídě metoda je prohlášen. S delegáta provádění způsobu nebo součást metody obsažené ve třídě, mohou být delegovány na jiné třídy.

Zde, Máme jednoduchý příklad pochopit delegátů. Máme třídu Playlist, který umožňuje přidat skladby do seznamu stop. Třída Playlist poskytuje metodu nazvanou ShowPlaylist že vypíše všechny skladby v playlistu.

class Playlist
{
     // code eliminated for brevity
     
    public void ShowPlaylist()
    {
          foreach (Song song in this.list)
          {
               Console.WriteLine("Název písně: {0}". song.Title);       
          }
    }

}

Použitím metody Playlist třída ShowPlaylist dostane plnou playlist tištěnou.

Pojďme se seznámit delegáty na Playlist třídě. Pomocí delegáta umožní spotřebiteli z playlistu třídy implementovat logiku pro zobrazení playlistu.

Tady deklarovat delegát ve třídě playlistu, který má zazpívat parametr typu Song

class Playlist
{
     // kód odstraněny pro stručnost
     // delegate for showing song
     public delegate bool ProcessPlaylistDelegate(Song song);

...

Musíme upravit ShowPlayList() Způsob použití ProcessPlaylistDelegate. Způsob ShowPlayList vezme ProcessPlaylistDelegate jako parametr. Nyní můžeme zpracovat playlistu před tiskem.

        //show the playlist using another function attached to ProcessPlaylistDelegate
        public void ShowPlaylist(ProcessPlaylistDelegate processPlaylist)
        {
            foreach (Song song in this.list)
            {
                if (processPlaylist(píseň))
                {
                    Console.WriteLine("Název písně: {0}", song.Title);
                }
            }
        }

Nyní je tato třída může delegovat jakékoli zpracování jiné metody, pokud návratový typ a typ parametru odpovídá delegáta. Uvedený program třída používá třídu Playlist. Prohlašujeme novou Playlist.ProcessPlaylistDelegate a pak jsme připojování getMp3Songs delegátovi.

    class Program
    {
        static void Main(provázek[] args)
        {
             Playlist playlist1 = new Playlist();

             //add some songs to the playlist

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

  }

Níže je definice metoda getMp3Songs. Tato metoda vrací pouze MP3 skladby. Z tohoto důvodu bude ShowPlaylist ony tisknout mp3 písničky.

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

Síla delegátů se stane, když se můžeme zpracovat playlist rozdílně, aniž by museli dotknout třídu Playlist. Níže prohlašujeme 2 jiné metody ve třídě program.

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

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

Teď už stačí jen připojit tyto delegátům v metodě hlavní. Tyto metody budou zpracovávat playlist jinak. První metoda bude obsahovat pouze skladby z disku CD a druhá metoda bude obsahovat všechny skladby. Toto je jen jednoduchý příklad, ale můžeme přidat tolik zpracování jako my potřebují, aniž by museli dotknout třídu Playlist.

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

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


Ke stažení

Tagy: