Compartilhar via


Declaração Delegate

Usado para declarar um delegado.Um delegado é um tipo de referência que se refere a uma Shared método de um tipo ou a um método de instância de um objeto. Qualquer procedimento com o parâmetro e tipos de retorno correspondentes pode ser usado para criar uma instância dessaclassede 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 ]

Partes

Termo

Definição

attrlist

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

accessmodifier

Opcional.Especifica qual código pode acessar a delegado.Pode ser um dos seguintes:

  • Public.Qualquer código que pode acessar o elemento que declara o delegado pode acessá-lo.

  • Protegido por.Somente o código dentro do delegadoda classe ou uma classe de derivada pode acessá-lo.

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

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

Você pode especificar Protected Friend para permitir o acesso do código dentro do mesmo assembly, uma classede derivada ou o delegadoda classe.

Shadows

Opcional.Indica que este delegado redeclara 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 um Sub ou Function deve ser exibido.Esse procedimento como um delegadode declaraSubprocedimento que retorna um valor.

Function

É opcional, mas um Sub ou Function deve ser exibido.Esse procedimento como um delegadode declaraFunctionprocedimento que retorna um valor.

name

Necessário.Nome do tipo delegado ; segue um padrão variável de convenções de nomenclatura.

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 tipo de parâmetro pode ser declarada variante usando In e Out modificadores genéricos.Você deve colocar o Lista de tipo (Visual Basic) entre parênteses e conectá-lo com o Of palavra-chave.

parameterlist

Opcional.Lista de parâmetros que são passados para o procedimento , quando for chamado.Você deverá colocar o Lista de parâmetros (Visual Basic) entre parênteses.

type

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

Comentários

O Delegate demonstrativo define o parâmetro e tipos de retorno de umaclassede delegado. Qualquer procedimento com parâmetros e tipos de retorno correspondentes pode ser usado para criar uma instância dessaclassede delegado. O procedimento pode posteriormente ser invocado por meio de uma instância delegado , chamando o delegadodo Invoke método.

Representantes podem ser declaradas com o namespace, módulo, classeou estrutura 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 As type, parm2 As 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 (Visual Basic).

Para obter mais informações sobre delegados, consulte Delegados (Visual Basic).

Exemplo

O exemplo a seguir usa a Delegatede demonstrativo 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 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 (Visual Basic)

Referência

Operador AddressOf (Visual Basic)

Da cláusula (Visual Basic)

Em (modificador genérico) (Visual Basic)

Check-out (modificador genérico) (Visual Basic)

Conceitos

Tipos genéricos em Visual Basic (Visual Basic)

Outros recursos

Delegados (Visual Basic)

Covariância e/contravariância (C# e Visual Basic)