Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se usa para declarar un delegado. Un delegado es un tipo de referencia que hace referencia a un Shared método de un tipo o a un método de instancia de un objeto . Cualquier procedimiento con parámetros coincidentes y tipos de valor devuelto se puede usar para crear una instancia de esta clase de delegado. A continuación, el procedimiento se puede invocar posteriormente mediante la instancia de delegado.
Sintaxis
[ <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. Varios atributos están separados por comas. Debe incluir la lista de atributos entre corchetes angulares ("<" y ">"). |
accessmodifier |
Opcional. Especifica qué código puede acceder al delegado. Puede ser uno de los siguientes: - Público. Cualquier código que pueda tener acceso al elemento que declara el delegado puede acceder a él. - Protegido. Solo el código dentro de la clase del delegado o una clase derivada puede acceder a él. - Amigo. Solo el código dentro del mismo ensamblado puede acceder al delegado. - Privado. Solo el código dentro del elemento que declara el delegado puede acceder a él. - Amigo protegido Solo el código dentro de la clase del delegado, una clase derivada o el mismo ensamblado pueden tener acceso al delegado. - Protegido privado Solo el código dentro de la clase del delegado o en una clase derivada del mismo ensamblado puede tener acceso al delegado. |
Shadows |
Opcional. Indica que este delegado vuelve a declarar y oculta un elemento de programación con nombre idéntico, o un conjunto de elementos sobrecargados, en una clase base. Puede sombrear cualquier tipo de elemento declarado con cualquier otro tipo. Un elemento sombreado no está disponible desde dentro de la clase derivada que lo sombrea, excepto desde donde no se puede acceder al elemento de sombreado. Por ejemplo, si un Private elemento sombrea un elemento de clase base, el código que no tiene permiso para tener acceso al Private elemento tiene acceso al elemento de clase base en su lugar. |
Sub |
Opcional, pero debe aparecer o SubFunction . Declara este procedimiento como un procedimiento delegado Sub que no devuelve un valor. |
Function |
Opcional, pero debe aparecer o SubFunction . Declara este procedimiento como un procedimiento delegado Function que devuelve un valor. |
name |
Obligatorio. Nombre del tipo de delegado; sigue las convenciones de nomenclatura de variables estándar. |
typeparamlist |
Opcional. Lista de parámetros de tipo para este delegado. Varios parámetros de tipo están separados por comas. Opcionalmente, cada parámetro de tipo se puede declarar variante mediante In modificadores genéricos y Out . Debe incluir la lista de tipos entre paréntesis e introducirla con la Of palabra clave . |
parameterlist |
Opcional. Lista de parámetros que se pasan al procedimiento cuando se llama a él. Debe incluir la lista de parámetros entre paréntesis. |
type |
Obligatorio si especifica un Function procedimiento. Tipo de datos del valor devuelto. |
Observaciones
La Delegate instrucción define el parámetro y los tipos de valor devuelto de una clase de delegado. Cualquier procedimiento con parámetros coincidentes y tipos de valor devuelto se puede usar para crear una instancia de esta clase de delegado. A continuación, el procedimiento se puede invocar posteriormente mediante la instancia de delegado mediante una llamada al método del Invoke delegado.
Los delegados se pueden declarar en el nivel de espacio de nombres, módulo, clase o estructura, pero no dentro de un procedimiento.
Cada clase de delegado define un constructor al que se le 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 a una expresión lambda.
Para especificar una referencia a un método, use la sintaxis siguiente:
AddressOf [expression.]methodname
El tipo de tiempo de compilación de expression debe ser el nombre de una clase o una interfaz que contiene 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. El methodname no es opcional, incluso si crea un delegado para el método predeterminado de la clase.
Para especificar una expresión lambda, use la sintaxis siguiente:
Function ([parm As type, parm2 As 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 Expresiones lambda.
Para obtener más información sobre los delegados, vea Delegados.
Ejemplo
En el ejemplo siguiente se usa la Delegate instrucción para declarar un delegado para operar en dos números y devolver un número. El DelegateTest método toma una instancia de un delegado de este tipo y lo usa para operar en pares de números.
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