Latest web development tutorials

C # délégué (délégué)

C # Principal (délégué) similaire à C ou C ++ pointeur de fonction.Principal (Délégué) il existe une méthode pour un type de référence des références variables.Référence peut être modifiée lors de l'exécution.

Principal (Délégué) spécifiquement conçu pour les événements et les méthodes de rappel. Tout délégué (délégué) sont dérivés de la classeSystem.Delegate.

commission de déclaration (délégué)

déclaration Proxy détermine la méthode peut être référencée par le délégué. Délégué peut pointer vers un procédé ayant la même étiquette.

Par exemple, supposons que vous avez un délégué:

délégué public int MyDelegate (string s);

La commission ci - dessus peut être utilisé pour faire référence à toute méthode qui prend un paramètrede chaîneunique et renvoie une variable de typeint.

La syntaxe de déclaration commandé comme suit:

délégué <type de retour> <délégué-name> <liste de paramètres>

Des exemples de la commission (délégué)

Une fois déclarée type délégué, objet délégué doit utiliser lenouveau mot - clé pour créer, et avec des méthodes particulières.Lorsque vous créez un paramètre de délégué est passé à lanouvelle déclaration comme un appel de méthode, comme l' écriture, mais pas d' arguments.Par exemple:

Délégué public printString void (string s);
...
printString ps1 = new printString (WriteToScreen);
printString ps2 = new printString (WriteToFile);

L'exemple suivant montre la déclaration de la commission, instancier et l'utilisation, le délégué peut être utilisé pour faire référence à la méthode avec un argument entier et renvoie une valeur entière.

using System;

déléguer int NumberChanger (int n);
DelegateAppl d'espace de noms
{
   classe TestDelegate
   {
      static int num = 10;
      public static int AddNum (int p)
      {
         num + = p;
         retour num;
      }

      public static int MultNum (int q)
      {
         num * = q;
         retour num;
      }
      int public static getNum ()
      {
         retour num;
      }

      static void Main (string [] args)
      {
         // Création d'une instance de délégué NumberChanger nc1 = new NumberChanger (AddNum);
         NumberChanger nc2 = new NumberChanger (MultNum);
         // Appel de la méthode utilisant un nc1 objet délégué (25);
         Console.WriteLine ( "Valeur de Num: {0}", getNum ());
         NC2 (5);
         Console.WriteLine ( "Valeur de Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Valeur de Num: 35
Valeur de Num: 175

multicast Mise en service (Multicast d'un délégué)

objet délégué peut utiliser l'opérateur "+" pour fusionner. Un délégué de l'appeler merge fusionner deux délégués. Seul le même type de fiducie peut être combiné. "-" L'opérateur peut être utilisé pour retirer le composant du délégué délégué combiné.

Utilisez cette fonction utile a commandé, vous pouvez créer une liste de délégué appelle la méthode lorsqu'il est appelé à invoquer. Ceci est appelémulticast délégué (multicasting),également connu comme le multicast. Le programme suivant montre un délégué multicast:

using System;

déléguer int NumberChanger (int n);
DelegateAppl d'espace de noms
{
   classe TestDelegate
   {
      static int num = 10;
      public static int AddNum (int p)
      {
         num + = p;
         retour num;
      }

      public static int MultNum (int q)
      {
         num * = q;
         retour num;
      }
      int public static getNum ()
      {
         retour num;
      }

      static void Main (string [] args)
      {
         // Création d'une instance de délégué NumberChanger nc;
         NumberChanger nc1 = new NumberChanger (AddNum);
         NumberChanger nc2 = new NumberChanger (MultNum);
         nc = NC1;
         nc + = nc2;
         // Appel nc multicast (5);
         Console.WriteLine ( "Valeur de Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Valeur de Num: 75

Principales utilisations (délégué)

L'exemple suivant illustre l'utilisation de la délégation.printStringprincipal être utilisé pour faire référence à la méthode avec une chaîne en entrée et ne retourne rien.

Nous utilisons ce délégué pour appeler les deux méthodes, la première chaîne imprimée à la console, et la deuxième chaîne à imprimer dans un fichier:

using System;
using System.IO;

DelegateAppl d'espace de noms
{
   classe printString
   {
      fs FileStream statiques;
      sw StreamWriter statique;
      // Déclaration Proxy délégué public void printString (string s);

      // Cette méthode imprime sur la console publique WriteToScreen static void (string str)
      {
         Console.WriteLine ( "La chaîne est: {0}", str);
      }
      // Cette méthode imprime pour déposer WriteToFile public static void (string s)
      {
         fs = new FileStream ( "c: \\ message.txt",
         FileMode.APPEND, FileAccess.Write);
         sw = new StreamWriter (fs);
         sw.WriteLine (s);
         sw.Flush ();
         sw.Close ();
         fs.Close ();
      }
      // Cette méthode du délégué en tant que paramètre, et l'utiliser pour appeler la méthode sendString public static void (ps printString)
      {
         ps ( "Bonjour le monde");
      }
      static void Main (string [] args)
      {
         printString ps1 = new printString (WriteToScreen);
         printString ps2 = new printString (WriteToFile);
         sendString (ps1);
         sendString (ps2);
         Console.ReadKey ();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

La chaîne est: Bonjour tout le monde