Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wanneer u een methode toewijst aan een gemachtigde, bieden covariantie en contravariantie flexibiliteit voor het koppelen van een gedelegeerdetype aan een methodehandtekening. Met covariantie kan een methode een returntype hebben dat meer afgeleid is dan dat in de delegate is gedefinieerd. Contravariantie staat een methode toe waarvan de parametertypen minder afgeleid zijn dan die in het delegate type.
Voorbeeld 1: Covariantie
Beschrijving
In dit voorbeeld ziet u hoe gemachtigden kunnen worden gebruikt met methoden die retourtypen hebben die zijn afgeleid van het retourtype in de handtekening voor gemachtigden. Het gegevenstype dat wordt geretourneerd door DogsHandler is van het type Dogs, dat is afgeleid van het Mammals type dat is gedefinieerd in de gemachtigde.
Code
Class Mammals
End Class
Class Dogs
Inherits Mammals
End Class
Class Test
Public Delegate Function HandlerMethod() As Mammals
Public Shared Function MammalsHandler() As Mammals
Return Nothing
End Function
Public Shared Function DogsHandler() As Dogs
Return Nothing
End Function
Sub Test()
Dim handlerMammals As HandlerMethod = AddressOf MammalsHandler
' Covariance enables this assignment.
Dim handlerDogs As HandlerMethod = AddressOf DogsHandler
End Sub
End Class
Voorbeeld 2: Contravariantie
Beschrijving
In dit voorbeeld ziet u hoe gemachtigden kunnen worden gebruikt met methoden met parameters waarvan de typen basistypen zijn van het parametertype voor de gedelegeerde handtekening. Met contravariantie kunt u één gebeurtenishandler gebruiken in plaats van afzonderlijke handlers. In het volgende voorbeeld worden twee gemachtigden gebruikt:
Een KeyEventHandler delegate die de signatuur van de gebeurtenis Button.KeyDown definieert. De handtekening is:
Public Delegate Sub KeyEventHandler(sender As Object, e As KeyEventArgs)Een MouseEventHandler gedelegeerde die de signatuur van het Button.MouseClick evenement definieert. De handtekening is:
Public Delegate Sub MouseEventHandler(sender As Object, e As MouseEventArgs)
Het voorbeeld definieert een eventhandler met een EventArgs parameter en gebruikt deze om zowel de Button.KeyDown als de Button.MouseClick gebeurtenissen te verwerken. Dit kan omdat EventArgs een basistype is van zowel KeyEventArgs als MouseEventArgs.
Code
' Event handler that accepts a parameter of the EventArgs type.
Private Sub MultiHandler(ByVal sender As Object,
ByVal e As System.EventArgs)
Label1.Text = DateTime.Now
End Sub
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
' You can use a method that has an EventArgs parameter,
' although the event expects the KeyEventArgs parameter.
AddHandler Button1.KeyDown, AddressOf MultiHandler
' You can use the same method
' for the event that expects the MouseEventArgs parameter.
AddHandler Button1.MouseClick, AddressOf MultiHandler
End Sub