Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Beispiel wird gezeigt, wie Stellvertretungen zum Übergeben einer Prozedur an eine andere Prozedur verwendet werden.
Ein Delegat ist ein Typ, den Sie wie jeden anderen Typ in Visual Basic verwenden können. Der AddressOf
Operator gibt ein Delegate-Objekt zurück, wenn es auf einen Prozedurnamen angewendet wird.
Dieses Beispiel verfügt über eine Prozedur mit einem Delegatenparameter, der einen Verweis auf eine andere Prozedur annehmen kann, die mit dem AddressOf
Operator abgerufen wird.
Erstellen des Delegaten und der übereinstimmenden Prozeduren
Erstellen Sie eine Stellvertretung mit dem Namen
MathOperator
.Delegate Function MathOperator( ByVal x As Double, ByVal y As Double ) As Double
Erstellen Sie eine Prozedur
AddNumbers
mit Parametern und Rückgabewert, die mit denenMathOperator
übereinstimmen, sodass die Signaturen übereinstimmen.Function AddNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x + y End Function
Erstellen Sie eine Prozedur namens
SubtractNumbers
mit einer Signatur, die mitMathOperator
übereinstimmt.Function SubtractNumbers( ByVal x As Double, ByVal y As Double ) As Double Return x - y End Function
Erstellen Sie eine Prozedur mit dem Namen
DelegateTest
, die einen Delegaten als Parameter verwendet.Dieses Verfahren kann einen Verweis auf
AddNumbers
oderSubtractNumbers
, da ihre Signaturen mit derMathOperator
Signatur übereinstimmen, akzeptieren.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
Erstellen Sie eine Prozedur mit dem Namen
Test
, dieDelegateTest
einmal mit dem Delegaten fürAddNumbers
als Parameter und erneut mit dem Delegaten fürSubtractNumbers
als Parameter aufruft.Protected Sub Test() DelegateTest(5, AddressOf AddNumbers, 3) DelegateTest(9, AddressOf SubtractNumbers, 3) End Sub
Wenn
Test
aufgerufen wird, zeigt es zuerst das Ergebnis der Auswirkung vonAddNumbers
auf5
und3
, was 8 ist. Dann wird das Ergebnis der Aktion vonSubtractNumbers
auf9
und3
angezeigt, das 6 ist.