Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ezek a példák bemutatják, hogyan használhatja a kovarianciát és a kontravarianciát az Func és Action általános delegátumokban a metódusok újrafelhasználásának engedélyezéséhez és a kód rugalmasságának biztosításához.
A kovarianciáról és az ellenvarianciáról további információt a Meghatalmazottak varianciája (Visual Basic) című témakörben talál.
Delegáltak használata kovariáns típusparaméterekkel
Az alábbi példa a kovariáns támogatás előnyeit mutatja be az általános Func delegátumokban. A FindByTitle metódus a típus paraméterét String veszi fel, és visszaadja a Employee típus egy objektumát. Ezt a metódust azonban hozzárendelheti a Func(Of String, Person) meghatalmazotthoz, mert Employee örökli Person.
' Simple hierarchy of classes.
Public Class Person
End Class
Public Class Employee
Inherits Person
End Class
Class Finder
Public Shared Function FindByTitle(
ByVal title As String) As Employee
' This is a stub for a method that returns
' an employee that has the specified title.
Return New Employee
End Function
Sub Test()
' Create an instance of the delegate without using variance.
Dim findEmployee As Func(Of String, Employee) =
AddressOf FindByTitle
' The delegate expects a method to return Person,
' but you can assign it a method that returns Employee.
Dim findPerson As Func(Of String, Person) =
AddressOf FindByTitle
' You can also assign a delegate
' that returns a more derived type to a delegate
' that returns a less derived type.
findPerson = findEmployee
End Sub
End Class
Meghatalmazottak használata contravariáns típusú paraméterekkel
Az alábbi példa a contravariance támogatás előnyeit mutatja be az Action általános delegáltakban. A AddToContacts metódus egy ilyen típusú paramétert Person használ. Ezt a metódust azonban hozzárendelheti a Action(Of Employee) meghatalmazotthoz, mert Employee örökli Person.
Public Class Person
End Class
Public Class Employee
Inherits Person
End Class
Class AddressBook
Shared Sub AddToContacts(ByVal person As Person)
' This method adds a Person object
' to a contact list.
End Sub
Sub Test()
' Create an instance of the delegate without using variance.
Dim addPersonToContacts As Action(Of Person) =
AddressOf AddToContacts
' The Action delegate expects
' a method that has an Employee parameter,
' but you can assign it a method that has a Person parameter
' because Employee derives from Person.
Dim addEmployeeToContacts As Action(Of Employee) =
AddressOf AddToContacts
' You can also assign a delegate
' that accepts a less derived parameter
' to a delegate that accepts a more derived parameter.
addEmployeeToContacts = addPersonToContacts
End Sub
End Class