C # délégués tutoriel et exemple

C # délégués permet d'utiliser une méthode comme un objet. Cela signifie que vous êtes en mesure de transmettre la méthode comme un argument à une autre méthode. Cela se fait en pointant un délégué à un procédé et à faire passer le délégué comme argument. Ensuite, en utilisant le délégué, vous êtes en mesure d'appeler la méthode que le délégué pointe vers.

La partie utile de délégués est donc un procédé peut être passé d'un objet à un autre.

Comme nous le savons une méthode représente un certain type d'action qu'un objet peut faire. Cette action est mise en œuvre dans la définition de la méthode elle-même dans la classe la méthode est déclarée. Avec un délégué la mise en œuvre de la méthode ou d'une partie de la méthode contenue dans la classe, peut être déléguée à une autre classe.

Ici, nous avons un exemple simple pour comprendre les délégués. Nous avons une classe de liste de lecture qui permet d'ajouter des chansons à une playlist. La classe Playlist fournit une méthode appelée ShowPlaylist qui imprime toutes les chansons de la playlist.

playlist classe
{
     // code eliminated for brevity
     
    public void ShowPlaylist()
    {
          pour chaque (chanson Song dans This.List)
          {
               Console.WriteLine("Titre de la chanson: {0}". titre de la chanson);       
          }
    }

}

Using the Playlist class ShowPlaylist method will get the full playlist printed.

Présentons les délégués à la classe Playlist. Using a delegate will allow the the consumer of the Playlist class to implement the logic for showing the playlist.

nous déclarons ici un délégué dans la classe Playlist qui a un paramètre chanter la chanson de type

playlist classe
{
     // Code éliminé par souci de concision
     // delegate for showing song
     public delegate bool ProcessPlaylistDelegate(Chanson Chanson);

...

Nous devons régler le ShowPlayList() Procédé pour utiliser le ProcessPlaylistDelegate. La méthode de ShowPlayList prend la ProcessPlaylistDelegate en tant que paramètre. Maintenant, nous pouvons traiter la liste de lecture avant de l'imprimer.

        //show the playlist using another function attached to ProcessPlaylistDelegate
        public void ShowPlaylist(ProcessPlaylistDelegate processPlaylist)
        {
            pour chaque (chanson Song dans This.List)
            {
                si (processPlaylist(chant))
                {
                    Console.WriteLine("Titre de la chanson: {0}", titre de la chanson);
                }
            }
        }

Maintenant, cette classe peut déléguer tout traitement à une autre méthode tant que le type de retour et le type de paramètre correspond au délégué. Below the Program class is using the Playlist class. Nous déclarons une nouvelle Playlist.ProcessPlaylistDelegate et nous joignons les getMp3Songs au délégué.

    Programme de classe
    {
        static void main(chaîne[] 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(nouveau Playlist.ProcessPlaylistDelegate(GetMp3Songs));
        }

  }

Voici la définition de méthode getMp3Songs. Cette méthode ne retourne que les chansons mp3. Par conséquent, le ShowPlaylist va ony imprimer les chansons mp3.

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

La puissance des délégués qui se passe quand nous pouvons traiter différemment la liste de lecture sans avoir à toucher la classe Playlist. Below we declare 2 other methods in the Program class.

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

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

Now we just need to attach these to the delegates in the Main method. These methods will process the playlist differently. La première méthode ne comprendra des chansons de CD et la deuxième méthode comprendra toutes les chansons. This is just a simple example but we can add as much processing as we require without having to touch the class Playlist.

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

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


Télécharger

Mots clés: