Delegate-Anweisung

Wird zur Deklaration eines Delegaten verwendet.Ein Delegat ist ein Referenztyp, der auf eine Shared-Methode eines Typs oder auf eine Instanzenmethode eines Objekts verweist.Jede Prozedur mit identischen Parameter- und Rückgabetypen kann zum Erstellen einer Instanz dieser Delegatklasse verwendet werden.Die Prozedur kann anschließend mittels der Delegatinstanz aufgerufen werden.

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

Teile

Begriff

Definition

attrlist

Optional.Liste der Attribute, die für diesen Delegaten zutreffen.Mehrere Attribute werden durch Komma voneinander getrennt.Schließen Sie die Attributliste (Visual Basic) in spitzen Klammern ("<" und ">") ein.

accessmodifier

Optional.Gibt an, welcher Code auf den Delegaten zugreifen kann.Einer der folgenden Werte ist möglich:

  • Public.Jeder Code, der auf das Element zugreifen kann, das den Delegaten deklariert, kann auf diesen zugreifen.

  • Protected.Nur Code innerhalb der Klasse des Delegaten oder innerhalb einer abgeleiteten Klasse kann auf den Delegaten zugreifen.

  • Friend.Nur Code innerhalb der gleichen Assembly kann auf den Delegaten zugreifen.

  • Privat.Nur Code innerhalb des Elements, das den Delegaten deklariert, kann auf diesen zugreifen.

Sie können Protected Friend angeben, um den Zugriff von Code innerhalb der Klasse des Delegaten, innerhalb einer abgeleiteten Klasse oder innerhalb der gleichen Assembly zu ermöglichen.

Shadows

Optional.Gibt an, dass dieser Delegat ein Programmierelement mit der gleichen Bezeichnung oder eine Gruppe überladener Elemente in einer Basisklasse erneut deklariert und ausblendet.Sie können mit jeder Art von deklarierten Elementen ein Shadowing einer anderen Art durchführen.

Ein Element, für das ein Shadowing durchgeführt wurde, ist innerhalb der abgeleiteten Klasse, die das Shadowing durchführt, nicht verfügbar, es sei denn, auf das Element, welches das Shadowing durchführt, kann nicht zugegriffen werden.Wenn z. B. ein Private-Element ein Shadowing eines Basisklassenelements durchführt, greift Code ohne Zugriffsberechtigung für das Private-Element stattdessen auf das Basisklassenelement zu.

Sub

Optional (entweder muss Sub oder Function angegeben werden).Deklariert diese Prozedur als Sub-Prozedur des Delegaten, die keinen Wert zurückgibt.

Function

Optional (entweder muss Sub oder Function angegeben werden).Deklariert diese Prozedur als Function-Prozedur des Delegaten, die einen Wert zurückgibt.

name

Erforderlich.Name des Delegattyps; entspricht den Standardnamenskonventionen für Variablen.

typeparamlist

Optional.Liste mit Typparametern für diesen Delegaten.Mehrere Typparameter werden durch Komma voneinander getrennt.Optional kann jeder Typparameter mit dem generischen In-Modifizierer und dem generischen Out-Modifizierer als Variant deklariert werden.Sie müssen die Typenliste (Visual Basic) in Klammern einschließen und mit dem Of-Schlüsselwort einleiten.

parameterlist

Optional.Liste mit Parametern, die an die Prozedur übergeben werden, wenn diese aufgerufen wird.Sie müssen die Parameterliste (Visual Basic) in Klammern einschließen.

type

Erforderlich, wenn Sie eine Function-Prozedur angeben.Datentyp des Rückgabewerts.

Hinweise

Die Delegate-Anweisung definiert die Parameter- und Rückgabetypen einer Delegatklasse.Jede Prozedur mit identischen Parameter- und Rückgabetypen kann zum Erstellen einer Instanz dieser Delegatklasse verwendet werden.Die Prozedur kann anschließend über die Delegatinstanz aufgerufen werden. Dazu rufen Sie die Invoke-Methode des Delegaten auf.

Delegaten können auf Namespace-, Modul-, Klassen- oder Strukturebene deklariert werden, jedoch nicht innerhalb einer Prozedur.

Jede Delegatklasse definiert einen Konstruktor, an den die Spezifikation einer Objektmethode übergeben wird.Ein Argument für einen Delegatkonstruktor muss ein Verweis auf eine Methode oder ein Lambda-Ausdruck sein.

Verwenden Sie die folgende Syntax, um einen Verweis auf eine Methode festzulegen:

AddressOf [expression.]methodname

Der Typ von expression muss zur Kompilierungszeit der Name einer Klasse oder Schnittstelle sein, die eine Methode des angegebenen Namens enthält, deren Signatur mit der Signatur der Delegatklasse übereinstimmt.Mit methodname kann entweder eine freigegebene Methode oder eine Instanzenmethode angegeben werden.methodname ist nicht optional, selbst dann nicht, wenn Sie einen Delegaten für die Standardmethode der Klasse erstellen.

Verwenden Sie die folgende Syntax, um einen Lambda-Ausdruck festzulegen:

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

Die Signatur der Funktion muss mit dem Delegattyp übereinstimmen.Weitere Informationen zu Lambdaausdrücken finden Sie unter Lambda-Ausdrücke (Visual Basic).

Weitere Informationen über Delegaten finden Sie unter Delegaten (Visual Basic).

Beispiel

Im folgenden Beispiel wird mit der Delegate-Anweisung ein Delegat deklariert, mit dem zwei Zahlen bearbeitet werden und eine Zahl zurückgegeben wird.Die DelegateTest-Methode verwendet eine Instanz eines Delegaten dieses Typs und bearbeitet damit Zahlenpaare.

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

Siehe auch

Aufgaben

Gewusst wie: Verwenden einer generischen Klasse (Visual Basic)

Referenz

AddressOf-Operator (Visual Basic)

Of-Klausel (Visual Basic)

In (generischer Modifizierer) (Visual Basic)

Out (generischer Modifizierer) (Visual Basic)

Konzepte

Generische Typen in Visual Basic (Visual Basic)

Weitere Ressourcen

Delegaten (Visual Basic)

Kovarianz und Kontravarianz (C# und Visual Basic)