C # - Metodi anonimi

Abbiamo discusso del fatto che i delegati vengono utilizzati per fare riferimento a qualsiasi metodo che abbia la stessa firma di quella del delegato. In altre parole, è possibile chiamare un metodo a cui può fare riferimento un delegato utilizzando quell'oggetto delegato.

Anonymous methodsfornire una tecnica per passare un blocco di codice come parametro delegato. I metodi anonimi sono i metodi senza nome, solo il corpo.

Non è necessario specificare il tipo di ritorno in un metodo anonimo; viene dedotto dall'istruzione return all'interno del corpo del metodo.

Scrivere un metodo anonimo

I metodi anonimi vengono dichiarati con la creazione dell'istanza del delegato, con un file delegateparola chiave. Per esempio,

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

Il blocco di codice Console.WriteLine ("Metodo anonimo: {0}", x); è il corpo del metodo anonimo.

Il delegato può essere chiamato allo stesso modo sia con metodi anonimi che con metodi denominati, ovvero passando i parametri del metodo all'oggetto delegato.

Per esempio,

nc(10);

Esempio

Il seguente esempio dimostra il concetto:

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();
      }
   }
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

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