Istruzione DelegateDelegate Statement

Usata per dichiarare un delegato.Used to declare a delegate. Un delegato è un tipo di riferimento che fa riferimento a un Shared metodo di un tipo o a un metodo di istanza di un oggetto.A delegate is a reference type that refers to a Shared method of a type or to an instance method of an object. Qualsiasi routine con parametri e tipi restituiti corrispondenti può utilizzabile per creare un'istanza di questa classe delegata.Any procedure with matching parameter and return types can be used to create an instance of this delegate class. La procedura può quindi essere successivamente richiamata tramite l'istanza del delegato.The procedure can then later be invoked by means of the delegate instance.

SintassiSyntax

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

PartiParts

TermineTerm DefinizioneDefinition
attrlist Facoltativo.Optional. Elenco di attributi che si applicano a questo delegato.List of attributes that apply to this delegate. Gli attributi sono separati da una virgola.Multiple attributes are separated by commas. È necessario racchiudere il elenco di attributi parentesi angolari ("<"e">").You must enclose the Attribute List in angle brackets ("<" and ">").
accessmodifier Facoltativo.Optional. Specifica il tipo di codice può accedere al delegato.Specifies what code can access the delegate. Può essere uno dei seguenti:Can be one of the following:

- Public.- Public. Può accedere qualsiasi codice che possa accedere all'elemento che viene dichiarato il delegato.Any code that can access the element that declares the delegate can access it.
- Protetto.- Protected. Solo il codice all'interno classe del delegato o una classe derivata può accedervi.Only code within the delegate's class or a derived class can access it.
- Friend.- Friend. Solo il codice all'interno dello stesso assembly possa accedere al delegato.Only code within the same assembly can access the delegate.
- Private.- Private. Solo il codice all'interno dell'elemento viene dichiarato il delegato può accedervi.Only code within the element that declares the delegate can access it.

- Protected Friend solo codice all'interno dello stesso assembly, una classe derivata o nella classe del delegato può accedere al delegato.- Protected Friend Only code within the delegate's class, a derived class, or the same assembly can access the delegate.
- Private Protected solo codice all'interno classe del delegato o in una classe derivata nello stesso assembly può accedere al delegato.- Private Protected Only code within the delegate's class or in a derived class in the same assembly can access the delegate.
Shadows Facoltativo.Optional. Indica che questo delegato ridichiara e nasconde un elemento di programmazione omonimo o un set di elementi in overload, una classe di base.Indicates that this delegate redeclares and hides an identically named programming element, or set of overloaded elements, in a base class. È possibile nascondere qualsiasi tipo di elemento dichiarato con qualsiasi altro tipo.You can shadow any kind of declared element with any other kind.

Un elemento nascosto non è disponibile all'interno della classe derivata che lo nasconde, a meno che l'elemento di shadowing sia inaccessibile.A shadowed element is unavailable from within the derived class that shadows it, except from where the shadowing element is inaccessible. Ad esempio, se un Private elemento nasconde un elemento di classe di base, il codice che non dispone dell'autorizzazione per accedere la Private elemento accede invece all'elemento di classe di base.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 Facoltativo, ma uno Sub o Function devono essere visualizzati.Optional, but either Sub or Function must appear. Consente di dichiarare questa routine come delegato Sub routine che restituisce un valore.Declares this procedure as a delegate Sub procedure that does not return a value.
Function Facoltativo, ma uno Sub o Function devono essere visualizzati.Optional, but either Sub or Function must appear. Consente di dichiarare questa routine come delegato Function routine che restituisce un valore.Declares this procedure as a delegate Function procedure that returns a value.
name Obbligatorio.Required. Nome del tipo delegato. segue le convenzioni di denominazione standard variabile.Name of the delegate type; follows standard variable naming conventions.
typeparamlist Facoltativo.Optional. Elenco di parametri di tipo per questo delegato.List of type parameters for this delegate. Più parametri di tipo sono separati da virgole.Multiple type parameters are separated by commas. Facoltativamente, ogni parametro di tipo può essere dichiarato variante mediante In e Out modificatori generici.Optionally, each type parameter can be declared variant by using In and Out generic modifiers. È necessario racchiudere il elenco dei tipi racchiuso tra parentesi e introdotte con la Of (parola chiave).You must enclose the Type List in parentheses and introduce it with the Of keyword.
parameterlist Facoltativo.Optional. Elenco di parametri passati alla procedura quando viene chiamato.List of parameters that are passed to the procedure when it is called. È necessario racchiudere il elenco di parametri racchiuso tra parentesi.You must enclose the Parameter List in parentheses.
type Necessario se si specifica un Function procedure.Required if you specify a Function procedure. Tipo di dati del valore restituito.Data type of the return value.

NoteRemarks

Il Delegate istruzione definisce il parametro e tipo restituito di una classe delegata.The Delegate statement defines the parameter and return types of a delegate class. Qualsiasi routine con parametri e tipi restituiti corrispondenti può essere utilizzato per creare un'istanza di questa classe delegata.Any procedure with matching parameters and return types can be used to create an instance of this delegate class. La procedura è quindi in un secondo momento accessibile tramite l'istanza del delegato, tramite la chiamata del delegato Invoke (metodo).The procedure can then later be invoked by means of the delegate instance, by calling the delegate's Invoke method.

I delegati possono essere dichiarati dello spazio dei nomi, modulo, classe o a livello di struttura, ma non all'interno di una procedura.Delegates can be declared at the namespace, module, class, or structure level, but not within a procedure.

Ogni classe delegata definisce un costruttore a cui viene passata la specifica di un metodo dell'oggetto.Each delegate class defines a constructor that is passed the specification of an object method. Un argomento di un costruttore di delegati deve essere un riferimento a un metodo o a un'espressione lambda.An argument to a delegate constructor must be a reference to a method, or a lambda expression.

Per specificare un riferimento a un metodo, usare la sintassi seguente:To specify a reference to a method, use the following syntax:

AddressOf [expression.]methodnameAddressOf [expression.]methodname

Il tipo in fase di compilazione dell'elemento expression deve essere il nome di una classe o un'interfaccia contenente un metodo con il nome specificato la cui firma corrisponde a quella della classe delegata.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. Il metodo methodname può essere o un metodo condiviso o un metodo di istanza.The methodname can be either a shared method or an instance method. methodname non è un elemento facoltativo, anche se si crea un delegato per il metodo predefinito della classe.The methodname is not optional, even if you create a delegate for the default method of the class.

Per specificare un'espressione lambda, usare la sintassi seguente:To specify a lambda expression, use the following syntax:

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

La firma della funzione deve corrispondere a quella del tipo delegato.The signature of the function must match that of the delegate type. Per altre informazioni sulle espressioni lambda, vedere Espressioni lambda in C++.For more information about lambda expressions, see Lambda Expressions.

Per altre informazioni sui delegati, vedere Delegati.For more information about delegates, see Delegates.

EsempioExample

L'esempio seguente usa il Delegate istruzione per dichiarare un delegato per operare su due numeri e la restituzione di un numero.The following example uses the Delegate statement to declare a delegate for operating on two numbers and returning a number. Il DelegateTest metodo accetta un'istanza di questo tipo di delegato e lo usa per operare su coppie di numeri.The DelegateTest method takes an instance of a delegate of this type and uses it to operate on pairs of numbers.

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

Vedere ancheSee also