Compartir a través de


delegado (Referencia de C#)

La declaración de un tipo delegado es similar a una firma de método.Tiene un valor devuelto y un número cualquiera de parámetros de cualquier tipo:

public delegate void TestDelegate(string message);
public delegate int TestDelegate(MyType m, long num);

Un delegate es un tipo de referencia que puede utilizarse para encapsular un método con nombre o anónimo.Los delegados son similares a los punteros a funciones de C++, pero son más seguros y proporcionan mayor seguridad de tipos.Para las aplicaciones de delegados, vea Delegados y Delegados genéricos.

Comentarios

Los delegados son la base de los eventos.

Se pueden crear instancias de un delegado asociándolo a un método con nombre o anónimo.Para obtener más información, vea Métodos con nombre y Métodos anónimos.

Para crear instancias del delegado debe utilizarse un método o una expresión lambda que tenga un tipo de valor devuelto y parámetros de entrada compatibles.Para obtener más información sobre el grado de variación permitida en la firma de método, vea Varianza en delegados (C# y Visual Basic).Para el uso con métodos anónimos, el delegado y el código que se van a asociar se declaran juntos.En esta sección se describen las dos formas de crear instancias de delegados.

Ejemplo

// Declare delegate -- defines required signature:
delegate double MathAction(double num);

class DelegateTest
{
    // Regular method that matches signature:
    static double Double(double input)
    {
        return input * 2;
    }

    static void Main()
    {
        // Instantiate delegate with named method:
        MathAction ma = Double;

        // Invoke delegate ma:
        double multByTwo = ma(4.5);
        Console.WriteLine("multByTwo: {0}", multByTwo);

        // Instantiate delegate with anonymous method:
        MathAction ma2 = delegate(double input)
        {
            return input * input;
        };

        double square = ma2(5);
        Console.WriteLine("square: {0}", square);

        // Instantiate delegate with lambda expression
        MathAction ma3 = s => s * s * s;
        double cube = ma3(4.375);

        Console.WriteLine("cube: {0}", cube);
    }
    // Output:
    // multByTwo: 9
    // square: 25
    // cube: 83.740234375
}

Especificación del lenguaje C#

Para obtener más información, vea la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Referencia

Palabras clave de C#

Tipos de referencia (Referencia de C#)

Delegados (Guía de programación de C#)

Eventos (Guía de programación de C#)

Delegados con métodos con nombre y delegados con métodos anónimos (Guía de programación de C#)

Métodos anónimos (Guía de programación de C#)

Conceptos

Guía de programación de C#

Otros recursos

Referencia de C#