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

Un delegado es un tipo que representa referencias a métodos con una lista de parámetros determinada y un tipo de valor devuelto.A delegate is a type that represents references to methods with a particular parameter list and return type. Cuando se crea una instancia de un delegado, puede asociar su instancia a cualquier método mediante una signatura compatible y un tipo de valor devuelto.When you instantiate a delegate, you can associate its instance with any method with a compatible signature and return type. Puede invocar (o llamar) al método a través de la instancia del delegado.You can invoke (or call) the method through the delegate instance.

Los delegados se utilizan para pasar métodos como argumentos a otros métodos.Delegates are used to pass methods as arguments to other methods. Los controladores de eventos no son más que métodos que se invocan a través de delegados.Event handlers are nothing more than methods that are invoked through delegates. Cree un método personalizado y una clase, como un control de Windows, podrá llamar al método cuando se produzca un determinado evento.You create a custom method, and a class such as a windows control can call your method when a certain event occurs. En el siguiente ejemplo se muestra una declaración de delegado:The following example shows a delegate declaration:

public delegate int PerformCalculation(int x, int y);

Cualquier método de cualquier clase o struct accesible que coincida con el tipo de delegado se puede asignar al delegado.Any method from any accessible class or struct that matches the delegate type can be assigned to the delegate. El método puede ser estático o de instancia.The method can be either static or an instance method. Esto permite cambiar las llamadas a métodos mediante programación y agregar nuevo código a las clases existentes.This makes it possible to programmatically change method calls, and also plug new code into existing classes.

Nota

En el contexto de la sobrecarga de métodos, la signatura de un método no incluye el valor devuelto.In the context of method overloading, the signature of a method does not include the return value. Sin embargo, en el contexto de los delegados, la signatura sí lo incluye.But in the context of delegates, the signature does include the return value. En otras palabras, un método debe tener el mismo tipo de valor devuelto que el delegado.In other words, a method must have the same return type as the delegate.

Esta capacidad de hacer referencia a un método como parámetro hace que los delegados sean idóneos para definir métodos de devolución de llamada.This ability to refer to a method as a parameter makes delegates ideal for defining callback methods. Por ejemplo, una referencia a un método que compara dos objetos podría pasarse como argumento a un algoritmo de ordenación.For example, a reference to a method that compares two objects could be passed as an argument to a sort algorithm. Dado que el código de comparación está en un procedimiento independiente, el algoritmo de ordenación se puede escribir de manera más general.Because the comparison code is in a separate procedure, the sort algorithm can be written in a more general way.

Información general sobre los delegadosDelegates Overview

Los delegados tienen las propiedades siguientes:Delegates have the following properties:

  • Los delegados son similares a los punteros de función de C++, pero los primeros están completamente orientados a objetos y, a diferencia de los punteros de C++ de funciones de miembro, los delegados encapsulan una instancia de objeto y un método.Delegates are similar to C++ function pointers, but delegates are fully object-oriented, and unlike C++ pointers to member functions, delegates encapsulate both an object instance and a method.

  • Los delegados permiten pasar los métodos como parámetros.Delegates allow methods to be passed as parameters.

  • Los delegados pueden usarse para definir métodos de devolución de llamada.Delegates can be used to define callback methods.

  • Los delegados pueden encadenarse entre sí; por ejemplo, se puede llamar a varios métodos en un solo evento.Delegates can be chained together; for example, multiple methods can be called on a single event.

  • No es necesario que los métodos coincidan exactamente con el tipo de delegado.Methods do not have to match the delegate type exactly. Para obtener más información, consulte Usar varianza en delegados.For more information, see Using Variance in Delegates.

  • La versión 2.0 de C# presentó el concepto de Métodos anónimos, los cuales permiten pasar bloques de código como parámetros en lugar de un método definido por separado.C# version 2.0 introduced the concept of Anonymous Methods, which allow code blocks to be passed as parameters in place of a separately defined method. En C# 3.0 se presentaron las expresiones lambda como una manera más concisa de escribir bloques de código alineado.C# 3.0 introduced lambda expressions as a more concise way of writing inline code blocks. Tanto los métodos anónimos como las expresiones lambda (en ciertos contextos) se compilan en tipos de delegado.Both anonymous methods and lambda expressions (in certain contexts) are compiled to delegate types. Juntas, estas características se conocen ahora como funciones anónimas.Together, these features are now known as anonymous functions. Para obtener más información sobre las expresiones lambda, consulte Funciones anónimas.For more information about lambda expressions, see Anonymous Functions.

En esta secciónIn This Section

Especificación del lenguaje C#C# Language Specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Delegates, Events, and Lambda Expressions (Delegados, eventos y expresiones lambda) en C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmersDelegates, Events, and Lambda Expressions in C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers

Delegates and Events (Delegados, eventos y expresiones lambda) en Learning C# 3.0: Master the fundamentals of C# 3.0Delegates and Events in Learning C# 3.0: Master the fundamentals of C# 3.0

Vea tambiénSee Also