C # - Métodos Anônimos

Discutimos que os delegados são usados ​​para fazer referência a qualquer método que tenha a mesma assinatura do delegado. Em outras palavras, você pode chamar um método que pode ser referenciado por um delegado usando esse objeto delegado.

Anonymous methodsfornecem uma técnica para passar um bloco de código como um parâmetro delegado. Os métodos anônimos são os métodos sem nome, apenas o corpo.

Você não precisa especificar o tipo de retorno em um método anônimo; ele é inferido da instrução return dentro do corpo do método.

Escrevendo um método anônimo

Métodos anônimos são declarados com a criação da instância delegada, com um delegatepalavra-chave. Por exemplo,

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

O bloco de código Console.WriteLine ("Método anônimo: {0}", x); é o corpo do método anônimo.

O delegado pode ser chamado tanto com métodos anônimos quanto com métodos nomeados da mesma maneira, ou seja, passando os parâmetros do método para o objeto delegado.

Por exemplo,

nc(10);

Exemplo

O exemplo a seguir demonstra o conceito -

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 o código acima é compilado e executado, ele produz o seguinte resultado -

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