C # - Méthodes anonymes

Nous avons discuté du fait que les délégués sont utilisés pour référencer toutes les méthodes qui ont la même signature que celle du délégué. En d'autres termes, vous pouvez appeler une méthode qui peut être référencée par un délégué à l'aide de cet objet délégué.

Anonymous methodsfournir une technique pour passer un bloc de code en tant que paramètre délégué. Les méthodes anonymes sont les méthodes sans nom, juste le corps.

Vous n'avez pas besoin de spécifier le type de retour dans une méthode anonyme; il est déduit de l'instruction return dans le corps de la méthode.

Écrire une méthode anonyme

Les méthodes anonymes sont déclarées lors de la création de l'instance de délégué, avec un delegatemot-clé. Par exemple,

delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x) {
   Console.WriteLine("Anonymous Method: {0}", x);
};

Le bloc de code Console.WriteLine ("Méthode anonyme: {0}", x); est le corps de la méthode anonyme.

Le délégué peut être appelé à la fois avec des méthodes anonymes et des méthodes nommées de la même manière, c'est-à-dire en passant les paramètres de méthode à l'objet délégué.

Par exemple,

nc(10);

Exemple

L'exemple suivant illustre le concept -

using System;

delegate void NumberChanger(int n);
namespace DelegateAppl {
   class TestDelegate {
      static int num = 10;
      
      public static void AddNum(int p) {
         num += p;
         Console.WriteLine("Named Method: {0}", num);
      }
      public static void MultNum(int q) {
         num *= q;
         Console.WriteLine("Named Method: {0}", num);
      }
      public static int getNum() {
         return num;
      }
      static void Main(string[] args) {
         //create delegate instances using anonymous method
         NumberChanger nc = delegate(int x) {
            Console.WriteLine("Anonymous Method: {0}", x);
         };
         
         //calling the delegate using the anonymous method 
         nc(10);
         
         //instantiating the delegate using the named methods 
         nc =  new NumberChanger(AddNum);
         
         //calling the delegate using the named methods 
         nc(5);
         
         //instantiating the delegate using another named methods 
         nc =  new NumberChanger(MultNum);
         
         //calling the delegate using the named methods 
         nc(2);
         Console.ReadKey();
      }
   }
}

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Anonymous Method: 10
Named Method: 15
Named Method: 30