C # Delegierten Tutorial und Beispiel

C # Teilnehmer ermöglicht, ein Verfahren wie ein Objekt zu verwenden,. Dies bedeutet, dass Sie in der Lage, die Methode als Argument an eine andere Methode zu übergeben. Dies wird durch den Hinweis eines Stellvertreters auf ein Verfahren und das Bestehen der Delegierten als Argument getan. Dann mit den Delegaten Sie in der Lage sind, um die Methode aufzurufen, die der Delegat verweist auf.

Der nützliche Teil der Teilnehmer ist so ein Verfahren kann von einem Objekt zu einem anderen übergeben werden.

Wie wir wissen, stellt ein Verfahren irgendeine Art von Aktion, die ein Objekt tun kann. Diese Aktion wird in der Methodendefinition selbst innerhalb der Klasse implementiert die Methode deklariert wird. Mit einem Delegierten die Durchführung des Verfahrens oder ein Teil des Verfahrens in der Klasse enthaltenen, kann in einer anderen Klasse delegiert werden.

Hier, Wir haben ein einfaches Beispiel Delegierten zu verstehen. Wir haben eine Playlist-Klasse, die Songs hinzufügen Zu einer Playlist erlaubt. Die Playlist-Klasse stellt eine Methode namens ShowPlaylist, die alle Songs in der Playliste ausdruckt.

Klasse Playlist
{
     // code eliminated for brevity
     
    public void ShowPlaylist()
    {
          für jede (Song Song in This.List)
          {
               Console.WriteLine("Song Titel: {0}". Song Titel);       
          }
    }

}

die Playlist-Klasse ShowPlaylist-Methode wird die gesamte Playlist erhalten gedruckt.

Lassen Sie uns vorstellen Delegierten der Playlist-Klasse. einen Delegaten verwendet, wird die die Verbraucher von der Playlist-Klasse ermöglicht die Logik zur Darstellung der Playlist zu implementieren.

Hier erklären wir, einen Delegaten in der Playlist-Klasse, die einen singen Parameter vom Typ Lied hat

Klasse Playlist
{
     // Code zur Kürze beseitigt
     // delegate for showing song
     public delegate bool ProcessPlaylistDelegate(Lied Lied);

...

Wir müssen den ShowPlayList einstellen() Methode die ProcessPlaylistDelegate. Die ShowPlayList Methode nimmt die ProcessPlaylistDelegate als Parameter. Nun können wir die Wiedergabeliste vor dem Drucken es verarbeiten.

        //show the playlist using another function attached to ProcessPlaylistDelegate
        public void ShowPlaylist(ProcessPlaylistDelegate processPlaylist)
        {
            für jede (Song Song in This.List)
            {
                ob (processPlaylist(Lied))
                {
                    Console.WriteLine("Song Titel: {0}", Song Titel);
                }
            }
        }

Jetzt kann diese Klasse eine Verarbeitung auf ein anderes Verfahren übertragen, solange der Rückgabetyp und Parametertyp den Delegaten. Unterhalb des Programms wird mit Klasse, um die Playlist-Klasse. Wir erklären, ein neues Playlist.ProcessPlaylistDelegate und dann befestigen wir die getMp3Songs an den Delegaten.

    Klasse-Programm
    {
        static void Main(Schnur[] 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(neuer Playlist.ProcessPlaylistDelegate(GetMp3Songs));
        }

  }

Unten ist die getMp3Songs Methodendefinition. Diese Methode liefert nur die MP3-Songs. Deshalb ist die ShowPlaylist wird ony die MP3-Songs drucken.

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

Die Macht der Delegierten geschieht, wenn wir die Wiedergabeliste anders verarbeiten kann, ohne die Playlist-Klasse berühren. Im Folgenden erklären 2 andere Methoden in der Program-Klasse.

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

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

Jetzt brauchen wir nur diese an die Delegierten in der Main-Methode befestigen. Diese Methoden werden die Playlist bearbeiten anders. Die erste Methode wird nur cd Lieder umfassen und die zweite Methode beinhaltet alle Songs. Dies ist nur ein einfaches Beispiel, aber wir können so viel Verarbeitung hinzufügen, wie wir benötigen, ohne die Klasse Playlist berühren.

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

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


Herunterladen

Schlagworte: