Delegate (Instrucción)
Se utiliza para declarar un delegado. Un delegado es un tipo de referencia que se establece para un método Shared de un tipo o para un método de instancia de un objeto. Se puede usar cualquier procedimiento con parámetro de coincidencia y tipos devueltos para crear una instancia de esta clase delegada. Se puede llamar al procedimiento por medio de la instancia de delegado.
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Partes
Término |
Definición |
attrlist |
Opcional. Lista de atributos que se aplican a este delegado. Los atributos múltiples se separan por comas. Debe incluir Lista de atributos (Visual Basic) entre corchetes angulares ("<" y ">"). |
accessmodifier |
Opcional. Especifica qué código puede tener acceso al delegado. Puede ser una de las siguientes:
Puede especificar Protected Friend para habilitar el acceso desde el código incluido en la clase delegada, en una clase derivada o en el mismo ensamblado. |
Shadows |
Opcional. Indica que este delegado vuelve a declarar y ocultar un elemento de programación con el mismo nombre, o un conjunto de elementos sobrecargados, en una clase base. Puede hacer que cualquier tipo de elemento declarado prevalezca sobre cualquier otro tipo. Un elemento sombreado no está disponible desde la clase derivada que lo sombrea, a menos que el elemento que produce el sombreado no esté accesible. Por ejemplo, si un elemento Private sombrea un elemento de clase base, el código que no tiene el permiso para obtener acceso al elemento Private obtiene acceso al elemento de clase base. |
Sub |
Opcional, pero debe aparecer Sub o Function. Declara este procedimiento como un procedimiento Sub delegado que no devuelve ningún valor. |
Function |
Opcional, pero debe aparecer Sub o Function. Declara este procedimiento como un procedimiento Function delegado que devuelve un valor. |
name |
Obligatorio. Nombre del tipo delegado. Sigue las convenciones de nomenclatura estándar de las variables. |
typeparamlist |
Opcional. Lista de parámetros de tipo de este delegado. Los parámetros de tipo están separados por comas. Opcionalmente, cada parámetro de tipo se puede declarar como variant utilizando los modificadores genéricos In y Out. Debe incluir la lista Lista de tipos (Visual Basic) entre paréntesis y anteponer la palabra clave Of. |
parameterlist |
Opcional. Lista de parámetros que se transfieren al procedimiento cuando se llama. Debe incluir la lista Lista de parámetros (Visual Basic) entre paréntesis. |
type |
Obligatorio si se especifica un procedimiento Function. Tipo de datos del valor devuelto. |
Comentarios
La instrucción Delegate define el parámetro y los tipos devueltos de una clase delegada. Se puede usar cualquier procedimiento con tipos de parámetros de coincidencia y tipos de valor devuelto para crear una instancia de esta clase delegada. Se puede llamar al procedimiento mediante la instancia de delegado, llamando al método Invoke del delegado.
Los delegados se pueden declarar en el nivel de espacio de nombres, módulo, clase o estructura, pero no en un procedimiento.
Cada clase delegada define un constructor al cual se pasa la especificación de un método de objeto. Un argumento para un constructor delegado debe ser una referencia a un método o una expresión lambda.
Para especificar una referencia a un método, utilice la sintaxis siguiente:
AddressOf [expression.]methodname
El tipo de tiempo de compilación de expression debe ser el nombre de una clase o interfaz que contenga un método del nombre especificado cuya firma coincida con la firma de la clase delegada. methodname puede ser un método compartido o un método de instancia. Aunque se cree un delegado para el método predeterminado de la clase, methodname no es opcional.
Para especificar una expresión lambda, utilice la sintaxis siguiente:
Function ([parm como type, parm2 como type2, ...]) expression
La firma de la función debe coincidir con la del tipo de delegado. Para obtener más información sobre las expresiones lambda, vea Lambda (expresiones) (Visual Basic).
Ejemplo
En el ejemplo siguiente se utiliza la instrucción Delegate para declarar un delegado que opere con dos números y devuelva un número. El método DelegateTest toma una instancia de un delegado de este tipo y la utiliza para ordenar los números en pares.
Delegate Function MathOperator(
ByVal x As Double,
ByVal y As Double
) As Double
Function AddNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x + y
End Function
Function SubtractNumbers(
ByVal x As Double,
ByVal y As Double
) As Double
Return x - y
End Function
Sub DelegateTest(
ByVal x As Double,
ByVal op As MathOperator,
ByVal y As Double
)
Dim ret As Double
ret = op.Invoke(x, y) ' Call the method.
MsgBox(ret)
End Sub
Protected Sub Test()
DelegateTest(5, AddressOf AddNumbers, 3)
DelegateTest(9, AddressOf SubtractNumbers, 3)
End Sub
Vea también
Tareas
Cómo: Usar clases genéricas (Visual Basic)
Referencia
AddressOf (Operador) (Visual Basic)
In (Modificador genérico) (Visual Basic)
Out (Modificador genérico) (Visual Basic)
Conceptos
Tipos genéricos en Visual Basic (Visual Basic)