Instrução Delegate
Usado para declarar um delegado. Um delegado é um tipo de referência que se refere a uma Sharedométodo de um tipo ou para uma instância de método de um objeto. Qualquer procedimento com o parâmetro e tipos de retorno correspondentes pode ser usado para criar uma instância dessa classede delegado. O procedimento mais tarde, em seguida, pode ser chamado por meio de uma instância do delegado.
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Parts
Term |
Definition |
attrlist |
Optional. Lista de atributos que aplicar a este delegado. Multiple attributes are separated by commas. You must enclose the Lista de atributos (Visual Basic) in angle brackets ("<" and ">"). |
accessmodifier |
Optional. Especifica qual código pode acessar o delegado. Can be one of the following:
Você pode especificar Protected Friend para permitir o acesso do código dentro classe, uma classede derivada ou mesmo assembly. |
Shadows |
Optional. Indica que este delegado redeclara e oculta um elemento de programação com nomes idênticos ou um conjunto de elementos sobrecarregados, em uma classe base. You can shadow any kind of declared element with any other kind. A shadowed element is unavailable from within the derived class that shadows it, except from where the shadowing element is inaccessible. For example, if a Private element shadows a base class element, code that does not have permission to access the Private element accesses the base class element instead. |
Sub |
Opcional, mas um Sub ou Function deve aparecer. Esse procedimento como um representante de declara Sub procedimento que não retorna um valor. |
Function |
Opcional, mas um Sub ou Function deve aparecer. Esse procedimento como um representante de declara Function procedimento que retorna um valor. |
name |
Required. Nome do tipo delegado; segue um padrão variável de convenções de nomenclatura. |
typeparamlist |
Optional. Lista de parâmetros de tipo para este delegado. Vários parâmetros de tipo são separados por vírgulas. Opcionalmente, cada tipo de parâmetro pode ser declarada variante usando In e Out modificadores genérico. Você deve colocar o Lista de tipos (Visual Basic) entre parênteses e conectá-lo com o Of palavra-chave. |
parameterlist |
Optional. Lista de parâmetros que são passados para o procedimento , quando for chamado. You must enclose the Lista de parâmetros (Visual Basic) in parentheses. |
type |
Necessário se você especificar um Function procedimento. Tipo de dados do valor retornado. |
Comentários
O Delegatededemonstrativo define o parâmetro e tipos de retorno de uma classede delegado. Qualquer procedimento com parâmetros e tipos de retorno correspondentes pode ser usado para criar uma instância dessa classede delegado. O procedimento pode posteriormente ser invocado por meio de uma instância delegate, chamando o delegado Invoke método.
Representantes podem ser declaradas com o namespace, módulo, classeou estrutura de nível, mas não dentro de um procedimento.
Each delegate class defines a constructor that is passed the specification of an object method. An argument to a delegate constructor must be a reference to a method, or a lambda expression.
To specify a reference to a method, use the following syntax:
AddressOf [expression.]methodname
The compile-time type of the expression must be the name of a class or an interface that contains a method of the specified name whose signature matches the signature of the delegate class. The methodname can be either a shared method or an instance method. The methodname is not optional, even if you create a delegate for the default method of the class.
To specify a lambda expression, use the following syntax:
Function([parm As type, parm2 As type2, ...]) expression
The signature of the function must match that of the delegate type. For more information about lambda expressions, see Expressões Lambda (Visual Basic).
Exemplo
O exemplo a seguir usa a Delegatededemonstrativo para declarar um delegado para operar em dois números e retornando um número. O DelegateTest método obtém uma instância de um representante desse tipo e o usa para operar em 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
Consulte também
Tarefas
Como: Usar uma classe genérica (Visual Basic)
Referência
Operador AddressOf (Visual Basic)
In (Modificador Genérico) (Visual Basic)
Out (modificador genérico) (Visual Basic)
Conceitos
Tipos genéricos no Visual Basic (Visual Basic)