Latest web development tutorials

C # delegado (delegado)

C # Principal (Delegado) similar a C o C ++ puntero de función.Principal (Delegado) hay un método para un tipo de referencia referencias a variables.Referencia se puede cambiar en tiempo de ejecución.

Principal (Delegado) destinado específicamente para eventos y métodos de devolución de llamada. Todo delegado (delegado) se derivan de la claseSystem.Delegate.

Declaración de la Comisión (Delegado)

declaración de representación determina el método puede ser referenciado por el delegado. Delegado puede apuntar a un procedimiento que tiene la misma etiqueta.

Por ejemplo, suponga que tiene un delegado:

delegado public int MyDelegate (cadena s);

La comisión anterior puede ser utilizado para referirse a cualquier método que toma un único parámetro decadenay devuelve una variable de tipoint.

La sintaxis para declarar encargó de la siguiente manera:

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

Los ejemplos de la comisión (Delegado)

Una vez declarado un tipo de delegado, objeto delegado debe utilizar lanueva palabra clave para crear, y con unos métodos particulares.Cuando se crea un parámetro delegado pasado a lanueva declaración como una llamada a un método, como la escritura, pero sin argumentos.Por ejemplo:

delegado pública printString vacío (cadena s);
...
printString PS1 = new printString (WriteToScreen);
printString PS2 = new printString (WriteToFile);

El siguiente ejemplo demuestra la declaración de la comisión, una instancia y el uso, el delegado puede ser utilizado para hacer referencia a método con un argumento entero y devuelve un valor entero.

using System;

delegar int NumberChanger (int n);
DelegateAppl de espacio de nombres
{
   clase TestDelegate
   {
      int num estática = 10;
      public static int AddNum (int p)
      {
         num = p +;
         num regresar;
      }

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

      static void main (String [] args)
      {
         // Crear una instancia de delegado NumberChanger nc1 = new NumberChanger (AddNum);
         NumberChanger NC2 = new NumberChanger (MultNum);
         // Llamar al método que utiliza un objeto delegado NC1 (25);
         Console.WriteLine ( "Valor de Num: {0}", getNum ());
         nc2 (5);
         Console.WriteLine ( "Valor de Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Valor de Num: 35
Valor de Num: 175

multidifusión encargado (multidifusión de un delegado)

objeto delegado puede usar el operador "+" para combinar. Un delegado llamarlo fusionar fusionar dos delegados. Sólo el mismo tipo de confianza puede ser combinado. "-" El operador puede utilizar para quitar el componente del delegado delegado combinado.

Utilice esta característica útil encargó, puede crear una lista de delegado llama al método cuando se llama a invocar. Esto se llamamultidifusión delegado (multidifusión),también conocido como la multidifusión. El programa siguiente muestra un delegado de multidifusión:

using System;

delegar int NumberChanger (int n);
DelegateAppl de espacio de nombres
{
   clase TestDelegate
   {
      int num estática = 10;
      public static int AddNum (int p)
      {
         num = p +;
         num regresar;
      }

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

      static void main (String [] args)
      {
         // Crear una instancia de delegado NumberChanger nc;
         NumberChanger nc1 = new NumberChanger (AddNum);
         NumberChanger NC2 = new NumberChanger (MultNum);
         nc = NC1;
         nc + = NC2;
         // Llamar nc multidifusión (5);
         Console.WriteLine ( "Valor de Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Valor de Num: 75

Principales usos (delegado)

El siguiente ejemplo muestra el uso de la delegación.printStringPrincipal se utiliza para hacer referencia método con una cadena como entrada y no devuelve nada.

Utilizamos este delegado para llamar a los dos métodos, la primera cadena de impresión a la consola, y la segunda cadena a imprimir a un archivo:

using System;
using System.IO;

DelegateAppl de espacio de nombres
{
   clase printString
   {
      FileStream fs estáticas;
      sw StreamWriter estática;
      // Declaración de Apoderado delegado public void printString (s cadena);

      // Este método imprime en la consola pública WriteToScreen static void (cadena str)
      {
         Console.WriteLine ( "La cadena es: {0}", str);
      }
      // Este método grabados para presentar pública WriteToFile static void (String s)
      {
         fs = new FileStream ( "c: \\ message.txt",
         FileMode.APPEND, FileAccess.Write);
         sw = nuevo StreamWriter (fs);
         sw.WriteLine (s);
         sw.Flush ();
         sw.Close ();
         fs.Close ();
      }
      // Este método el delegado como un parámetro, y lo utilizan para llamar al método público SendString static void (printString ps)
      {
         ps ( "Hello World");
      }
      static void main (String [] args)
      {
         printString PS1 = new printString (WriteToScreen);
         printString PS2 = new printString (WriteToFile);
         SendString (PS1);
         SendString (PS2);
         Console.ReadKey ();
      }
   }
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

La cadena es: Hello World