Compartilhar via


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:

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

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

  • Amigo. Somente o código dentro do mesmo assembly pode acessar o 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 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)

Cláusula Of (Visual Basic)

In (Modificador Genérico) (Visual Basic)

Out (modificador genérico) (Visual Basic)

Conceitos

Tipos genéricos no Visual Basic (Visual Basic)

Outros recursos

Delegados (Visual Basic)

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