Compartilhar via


Instrução Delegate

Usado para declarar um delegado.Um delegado é um tipo de referência que se refere a um Shared método de um tipo ou para um método de instância de um objeto. Qualquer procedimento com tipos de parâmetro e retorno correspondentes pode ser usado para criar uma instância desta classe delegado.O procedimento mais tarde, em seguida, pode ser chamado por meio de uma instância delegado.

[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]

Partes

  • attrlist
    Opcional.Lista de atributos que se aplicam a este delegado.Diversos parâmetros são separados por vírgulas.Você delimitar a Lista de atributos entre colchetes ("<" e ">").

  • accessmodifier
    Opcional.Especifica que o código pode acesso o delegado.Pode ser um dos seguintes:

    • Público.Qualquer código que pode acesso o elemento que declara o delegado pode acesso-lo.

    • Protegido.Somente o código dentro classe do delegado ou uma classe derivada pode acesso-lo.

    • Amigo.Somente o código dentro do mesmo assembly pode acesso o delegado.

    • Particular.Somente o código dentro do elemento que declara o delegado pode acessá-lo.

    Você pode especificar Protected Friend Para habilitar o acesso do código em classe do delegado, uma classe derivada ou mesmo conjunto de módulos (assembly).

  • Shadows
    Opcional.Indica que esse delegado redeclares e oculta um elemento de programação com nomes idênticos ou 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 dentro da classe derivada que o sombreia, com exceção de onde o elemento sombreamento é inacessível.Por exemplo, se um elemento Private sombreia um elemento da classe base, o código que não possui permissão para acessar o elemento Private acessa o elemento da classe base em vez disso.

  • Sub
    Opcional, mas qualquer um dos Sub ou Function deve aparecer. Declara esse procedimento sistema autônomo um delegado de Sub procedimento que não retorna um valor.

  • Function
    Opcional, mas qualquer um dos Sub ou Function deve aparecer. Declara esse procedimento sistema autônomo um delegado de Function procedimento que retorna um valor.

  • name
    Obrigatório.Nome do tipo delegado; segue convenções de nomenclatura de variável padrão.

  • typeparamlist
    Opcional.Lista de parâmetros para esse delegado.Vários parâmetros de tipo são separados por vírgulas.Você deve colocar o Lista de tipos entre parênteses e apresente-lo com o Of palavra-chave.

  • parameterlist
    Opcional.Lista de parâmetros que são passados ao procedimento quando for chamado.Você deverá colocar o Lista de parâmetros entre parênteses.

  • type
    Necessário se você especificar um Function procedimento. Tipo de dados de valor retornado.

Comentários

The Delegate demonstrativo define o parâmetro e tipos de retorno de uma classe de delegado. Qualquer procedimento com parâmetros e tipos de retorno correspondentes pode ser usado para criar uma instância desta classe delegado.O procedimento pode então posteriormente ser chamado por meio de uma instância delegado, chamando Invoke método.

Representantes podem ser declaradas no espaço para nome, módulo, classe ou estrutura de nível, mas não dentro de um procedimento.

Cada classe de delegados define um construtor que passa a especificação a um método objeto.Um argumento para um construtor delegate deve ser uma referência a um método ou um expressão lambda.

Para especificar uma referência a um método, use a seguinte sintaxe:

AddressOf [expression.]methodname

O compile-time type 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 de classe Delegate.O methodname pode ser um método compartilhado ou um método de instância.methodname não é opcional, mesmo se você criar um representante para o método padrão da classe.

Para especificar um expressão lambda, use a seguinte sintaxe:

Function ([parm como type, parm2 como type2,...]) expression

A assinatura de função deve corresponder do tipo delegate.Para obter mais informações sobre expressões lambda, consulte Expressões Lambda.

Exemplo

O exemplo a seguir utiliza o Delegate demonstrativo para declarar um delegado para operar em dois números e retornando um número. The DelegateTest método obtém 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

Consulte também

Tarefas

Como: Usar uma classe genérica

Conceitos

Tipos genéricos no Visual Basic

Referência

Operador AddressOf

Of

Outros recursos

Delegados no Visual Basic