Latest web development tutorials

C # delegado (delegado)

C # Principal (Delegado) semelhante ao C ou C ++ ponteiro de função.Principal (Delegado), existe um método para um tipo de referência referências de variáveis.Referência pode ser alterado em tempo de execução.

Principal (Delegado) destina-se especificamente para eventos e métodos de retorno de chamada. Todos delegado (delegado) são derivados da classeSystem.Delegate.

DECLARAÇÃO DA COMISSÃO (Delegado)

declaração de procuração determina o método pode ser referenciado pelo delegado. Delegado pode apontar para um método que tenha o mesmo marcador.

Por exemplo, suponha que você tenha um delegado:

Delegado público MyDelegate int (string s);

A comissão acima pode ser usado para se referir a qualquer método que leva um único parâmetro decadeiae retorna uma variável do tipoint.

A sintaxe para declarar encomendado como segue:

delegado <tipo de retorno> <delegado-name> <lista de parâmetros>

Exemplos da Comissão (Delegado)

Uma vez declarado um tipo delegado, objeto de delegação deve usar anova palavra-chave para criar e, com um determinado métodos.Quando você cria um parâmetro delegado passado para anova declaração como uma chamada de método, como a escrita, mas sem argumentos.Por exemplo:

Delegado público printString void (string s);
...
PrintString PS1 = new printString (WriteToScreen);
PrintString ps2 = new printString (WriteToFile);

O exemplo a seguir demonstra a declaração da Comissão, instanciar e usar, o delegado pode ser usado para fazer referência método com um argumento inteiro e retorna um valor inteiro.

using System;

delegar int NumberChanger (int n);
DelegateAppl namespace
{
   classe TestDelegate
   {
      int num estática = 10;
      public static int AddNum (int p)
      {
         Num + = p;
         retornar num;
      }

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

      static void Main (string [] args)
      {
         // Criar uma instância de delegado NumberChanger nc1 = new NumberChanger (AddNum);
         NumberChanger NC2 = new NumberChanger (MultNum);
         // Chamar o método utilizando um nc1 delegado objeto (25);
         Console.WriteLine ( "Valor de Num: {0}", getNum ());
         NC2 (5);
         Console.WriteLine ( "Valor de Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Valor das Num: 35
Valor das Num: 175

multicast encomendado (multicasting de um delegado)

objeto de delegação pode usar o operador "+" para mesclar. Um delegado de chamá-lo mesclar mesclar dois delegados. Apenas o mesmo tipo de confiança pode ser combinado. "-" Do operador pode ser usada para remover o componente do delegado delegado combinado.

Utilize este recurso útil encomendado, você pode criar uma lista de delegado chama o método quando ele é chamado para invocar. Isso é chamado demulticast delegada (multicasting),também conhecido como multicasting. O programa a seguir demonstra um delegado multicast:

using System;

delegar int NumberChanger (int n);
DelegateAppl namespace
{
   classe TestDelegate
   {
      int num estática = 10;
      public static int AddNum (int p)
      {
         Num + = p;
         retornar num;
      }

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

      static void Main (string [] args)
      {
         // Criar uma instância de delegado NumberChanger nc;
         NumberChanger nc1 = new NumberChanger (AddNum);
         NumberChanger NC2 = new NumberChanger (MultNum);
         nc = nc1;
         nc + = NC2;
         // Chamada nc multicast (5);
         Console.WriteLine ( "Valor de Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Valor das Num: 75

Principais (representante) usos

O exemplo a seguir demonstra o uso de delegação.printStringprincipal ser usado para fazer referência método com uma string como entrada e não retorna nada.

Nós usamos este delegado para chamar os dois métodos, a primeira corda impressa no console, e a segunda cadeia para imprimir em um arquivo:

using System;
usando System.IO;

DelegateAppl namespace
{
   classe PrintString
   {
      fs FileStream estático;
      sw StreamWriter estático;
      // Declaração de procuração delegado public void printString (string s);

      // Este método imprime o console pública WriteToScreen static void (string str)
      {
         Console.WriteLine ( "The String é: {0}", str);
      }
      // Este método imprime para arquivar 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 ();
      }
      // Este método o delegado como parâmetro, e usá-lo para chamar o método sendString public static void (PrintString ps)
      {
         ps ( "Olá Mundo");
      }
      static void Main (string [] args)
      {
         PrintString PS1 = new printString (WriteToScreen);
         PrintString ps2 = new printString (WriteToFile);
         sendString (PS1);
         sendString (PS2);
         Console.ReadKey ();
      }
   }
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

A String é: Olá Mundo