Se usa para declarar un delegado. Un delegado es un tipo de referencia que hace mención a un método Shared de un tipo o a un método de instancia de un objeto. Cualquier procedimiento con parámetros coincidentes y tipos devueltos puede usarse para crear una instancia de esta clase de delegado. Después, el procedimiento se puede invocar posteriormente mediante la instancia de delegado.
Sintaxis
VB
[ <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 diversos atributos se separan con 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:
- Public. Cualquier código con acceso al elemento que declara el delegado puede acceder a él. - Protected. Solo el código de la clase del delegado o de una clase derivada puede acceder a él. - Friend. Solo el código del mismo ensamblado puede acceder al delegado. - Private. Solo el código del elemento que declara el delegado puede acceder a él.
- Protected Friend. Solo el código de la clase del delegado, una clase derivada o el mismo ensamblado puede acceder a él. - Private Protected. Solo el código de la clase del delegado o en una clase derivada del mismo ensamblado puede acceder a él.
Shadows
Opcional. Indica que este delegado vuelve a declarar y oculta un elemento de programación con el mismo nombre, o un conjunto de elementos sobrecargados, en una clase base. Puede reemplazar cualquier tipo de elemento declarado con cualquier otro tipo.
Un elemento reemplazado no está disponible desde la clase derivada que lo reemplaza, excepto desde donde el elemento reemplazado es inaccesible. Por ejemplo, si un elemento Private reemplaza un elemento de clase base, el código que no tiene permiso para acceder al elemento Private accede en su lugar al elemento de clase base.
Sub
Opcional, pero deben aparecer Sub o Function. Declara esto como un procedimiento Sub delegado que no devuelve un valor.
Function
Opcional, pero deben aparecer Sub o Function. Declara esto como un procedimiento Function delegado que devuelve un valor.
name
Necesario. Nombre del tipo de delegado; sigue las convenciones estándar de nomenclatura de variables.
typeparamlist
Opcional. Lista de parámetros de tipo para este delegado. Los distintos tipos de parámetros se separan mediante comas. Opcionalmente, cada parámetro de tipo se puede declarar como variante mediante los modificadores genéricos In y Out. Debe incluir la lista de tipos entre paréntesis e introducirla con la palabra clave Of.
parameterlist
Opcional. Lista de parámetros que se pasan al procedimiento cuando se le llama. Debe incluir la lista de parámetros entre paréntesis.
type
Obligatorio si especifica un procedimiento Function. Tipo de datos del valor devuelto.
Comentarios
La instrucción Delegate define el parámetro y los tipos de valores devueltos de una clase de delegado. Cualquier procedimiento con parámetros coincidentes y tipos devueltos puede usarse para crear una instancia de esta clase de delegado. Después, el procedimiento se puede invocar posteriormente 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 que 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 siguiente sintaxis:
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. methodname no es opcional, incluso si se crea un delegado para el método predeterminado de la clase.
Para especificar una expresión lambda, utilice la siguiente sintaxis:
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, consulte Delegados.
Ejemplo
En el ejemplo siguiente se usa instrucción Delegate para declarar un delegado a fin de operar en dos números y devolver uno. El método DelegateTest toma una instancia de un delegado de este tipo y lo usa para operar en pares de números.
VB
DelegateFunction MathOperator(
ByVal x AsDouble,
ByVal y AsDouble
) AsDoubleFunction AddNumbers(
ByVal x AsDouble,
ByVal y AsDouble
) AsDoubleReturn x + y
EndFunctionFunction SubtractNumbers(
ByVal x AsDouble,
ByVal y AsDouble
) AsDoubleReturn x - y
EndFunctionSub DelegateTest(
ByVal x AsDouble,
ByVal op As MathOperator,
ByVal y AsDouble
)
Dim ret AsDouble
ret = op.Invoke(x, y) ' Call the method.
MsgBox(ret)
EndSubProtectedSub Test()
DelegateTest(5, AddressOf AddNumbers, 3)
DelegateTest(9, AddressOf SubtractNumbers, 3)
EndSub
Eduki honen iturburua GitHub-en aurki daiteke, bertan arazoak eta aldaketak egiteko eskaerak sortu eta berrikus ditzakezu. Informazio gehiagorako, ikusi gure kolaboratzaileen gida.
.NET oharrak
.NET iturburu irekiko proiektu bat da. Hautatu esteka bat oharrak bidaltzeko:
Bat egin IAren soluzio eskalagarrien soluzioak sortzeko topaketa sortarekin, mundu errealaren erabilera-kasuetan oinarrituak, beste garatzaile eta aditu batzuekin.