Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Usado para declarar um delegado. Um delegado é um tipo de referência que se refere a um Shared
método de um tipo ou a um método de instância de um objeto. Qualquer procedimento com parâmetro correspondente e tipos de retorno pode ser usado para criar uma instância dessa classe delegada. Em seguida, o procedimento pode ser invocado posteriormente por meio da instância delegada.
Sintaxe
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
Partes
Prazo | Definição |
---|---|
attrlist |
Opcional. Lista de atributos que se aplicam a esse delegado. Vários atributos são separados por vírgulas. Você deve colocar a Lista de Atributos entre colchetes angulares ("< " e "> "). |
accessmodifier |
Opcional. Especifica qual código pode acessar o delegado. Pode ser um dos seguintes: - Público. Qualquer código que possa acessar o elemento que declara o delegado pode acessá-lo. - Protegido. Somente o código dentro da classe do delegado ou de uma classe derivada pode acessá-lo. - Amigo. Somente o código no mesmo assembly pode acessar o delegado. - Particular. Somente o código dentro do elemento que declara o delegado pode acessá-lo. - Amigo Protegido Somente o código dentro da classe do delegado, uma classe derivada ou o mesmo assembly pode acessar o delegado. - Proteção Privada Somente o código dentro da classe do delegado ou em uma classe derivada no mesmo assembly pode acessar o delegado. |
Shadows |
Opcional. Indica que esse delegado redeclara e oculta um elemento de programação de nome idêntico ou um conjunto de elementos sobrecarregados em uma classe base. Você pode sombrear qualquer tipo de elemento declarado com qualquer outro tipo. Um elemento sombreado não está disponível de dentro da classe derivada que o sombreia, exceto de onde o elemento de sombreamento está inacessível. Por exemplo, se um Private elemento sombrear um elemento de classe base, o código que não tem permissão para acessar o Private elemento acessará o elemento de classe base. |
Sub |
Opcional, mas ou Sub Function deve aparecer. Declara esse procedimento como um procedimento delegado Sub que não retorna um valor. |
Function |
Opcional, mas ou Sub Function deve aparecer. Declara esse procedimento como um procedimento delegado Function que retorna um valor. |
name |
Obrigatório Nome do tipo delegado; segue as convenções de nomenclatura de variável padrão. |
typeparamlist |
Opcional. Lista de parâmetros de tipo para este delegado. Vários parâmetros de tipo são separados por vírgulas. Opcionalmente, cada parâmetro de tipo pode ser declarado variante usando In e Out modificadores genéricos. Você deve colocar a Lista de Tipos entre parênteses e apresentá-la com a Of palavra-chave. |
parameterlist |
Opcional. Lista de parâmetros que são passados para o procedimento quando ele é chamado. Você deve colocar a Lista de Parâmetros entre parênteses. |
type |
Necessário se você especificar um Function procedimento. Tipo de dados do valor retornado. |
Observações
A Delegate
instrução define o parâmetro e os tipos de retorno de uma classe delegada. Qualquer procedimento com parâmetros correspondentes e tipos de retorno pode ser usado para criar uma instância dessa classe delegada. Em seguida, o procedimento pode ser invocado posteriormente por meio da instância delegada, chamando o método do Invoke
delegado.
Os delegados podem ser declarados no namespace, módulo, classe ou nível de estrutura, mas não dentro de um procedimento.
Cada uma das classes delegadas define um construtor que recebe a especificação de um método de objeto. Um argumento para um construtor delegado deve ser uma referência a um método ou a uma expressão lambda.
Para especificar uma referência a um método, use a seguinte sintaxe:
AddressOf
[expression
.]methodname
O tipo de tempo de compilação do expression
deve ser o nome de uma classe ou uma interface que contém um método do nome especificado cuja assinatura coincide com a assinatura da classe delegada. O methodname
pode ser um método compartilhado ou um método de instância. O methodname
não é opcional, mesmo se você criar um delegado para o método padrão da classe.
Para especificar uma expressão lambda, use a seguinte sintaxe:
Function
([parm
Como type
, parm2
Como type2
, ...]) expression
A assinatura da função deve corresponder a do tipo delegado. Para obter mais informações sobre expressões lambda, consulte Expressões Lambda.
Para obter mais informações sobre delegados, consulte Delegados.
Exemplo
O exemplo a seguir usa a Delegate
instrução para declarar um delegado para operar em dois números e retornar um número. O DelegateTest
método usa uma instância de um delegado 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