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.
In Visual Basic maken covariantie en contravariantie impliciete verwijzingsconversie mogelijk voor matrixtypen, gedelegeerdentypen en algemene typeargumenten. Covariantie behoudt de compatibiliteit van toewijzingen en contravariantie keert deze om.
De volgende code toont het verschil tussen toewijzingscompatibiliteit, covariantie en contravariantie.
' Assignment compatibility.
Dim str As String = "test"
' An object of a more derived type is assigned to an object of a less derived type.
Dim obj As Object = str
' Covariance.
Dim strings As IEnumerable(Of String) = New List(Of String)()
' An object that is instantiated with a more derived type argument
' is assigned to an object instantiated with a less derived type argument.
' Assignment compatibility is preserved.
Dim objects As IEnumerable(Of Object) = strings
' Contravariance.
' Assume that there is the following method in the class:
' Shared Sub SetObject(ByVal o As Object)
' End Sub
Dim actObject As Action(Of Object) = AddressOf SetObject
' An object that is instantiated with a less derived type argument
' is assigned to an object instantiated with a more derived type argument.
' Assignment compatibility is reversed.
Dim actString As Action(Of String) = actObject
Covariantie voor matrices maakt impliciete conversie mogelijk van een matrix van een meer afgeleid type naar een matrix van een minder afgeleid type. Maar deze bewerking is niet veilig, zoals wordt weergegeven in het volgende codevoorbeeld.
Dim array() As Object = New String(10) {}
' The following statement produces a run-time exception.
' array(0) = 10
Covariantie- en contravariantieondersteuning voor methodegroepen maakt het mogelijk om methodesignaturen af te stemmen op gedelegeerdentypen. Deze overeenstemming stelt u in staat om niet alleen een methode toe te wijzen aan een gemachtigde die een overeenkomende handtekening heeft, maar ook aan een methode die:
- Retourneert een meer afgeleid type (covariantie) dan het retourtype dat is opgegeven door het gemachtigde type.
- Hiermee accepteert u parameters met minder afgeleide typen (contravariantie) dan parameters die zijn opgegeven door het gemachtigdetype.
Zie Variantie in Gemachtigden (Visual Basic) en Variantie gebruiken in Gemachtigden (Visual Basic) voor meer informatie.
In het volgende codevoorbeeld ziet u covariantie- en contravariantieondersteuning voor methodegroepen.
Shared Function GetObject() As Object
Return Nothing
End Function
Shared Sub SetObject(ByVal obj As Object)
End Sub
Shared Function GetString() As String
Return ""
End Function
Shared Sub SetString(ByVal str As String)
End Sub
Shared Sub Test()
' Covariance. A delegate specifies a return type as object,
' but you can assign a method that returns a string.
Dim del As Func(Of Object) = AddressOf GetString
' Contravariance. A delegate specifies a parameter type as string,
' but you can assign a method that takes an object.
Dim del2 As Action(Of String) = AddressOf SetObject
End Sub
In .NET Framework 4 of hoger ondersteunt Visual Basic covariantie en contravariantie in algemene interfaces en gemachtigden en maakt impliciete conversie van algemene typeparameters mogelijk. Zie Variantie in algemene interfaces (Visual Basic) en variantie in Gemachtigden (Visual Basic) voor meer informatie.
In het volgende codevoorbeeld ziet u impliciete verwijzingsconversie voor algemene interfaces.
Dim strings As IEnumerable(Of String) = New List(Of String)
Dim objects As IEnumerable(Of Object) = strings
Een interface of delegate wordt variant genoemd als de generieke parameters covariant of contravariant worden gedeclareerd. Met Visual Basic kunt u uw eigen variantinterfaces en gemachtigden maken. Voor meer informatie, zie Varianten generieke interfaces maken (Visual Basic) en Variantie in afgevaardigden (Visual Basic).
Verwante artikelen
Titel | Beschrijving |
---|---|
Afwijking in algemene interfaces (Visual Basic) | Bespreekt covariantie en contravariantie in algemene interfaces en biedt een lijst met variant-algemene interfaces in .NET Framework. |
Het maken van varianten van generieke interfaces (Visual Basic) | Laat zien hoe u aangepaste variantinterfaces maakt. |
Variantie gebruiken in interfaces voor algemene verzamelingen (Visual Basic) | Laat zien hoe covariantie- en contravariantieondersteuning in de IEnumerable<T> en IComparable<T> interfaces u kunnen helpen bij het hergebruik van code. |
Afwijking in gemachtigden (Visual Basic) | Bespreekt covariantie en contravariantie binnen generieke en niet-generieke gedelegeerden en biedt een lijst van varianten van generieke gedelegeerden in het .NET Framework. |
Variatie in gedelegeerden gebruiken (Visual Basic) | Laat zien hoe u covariantie- en contravariantieondersteuning gebruikt in niet-algemene gemachtigden om methodehandtekeningen te vergelijken met gedelegeerdentypen. |
Variantie gebruiken voor Func en Action generieke gedelegeerden (Visual Basic) | Hier ziet u hoe ondersteuning voor covariantie en contravariantie in de Func - en Action -delegaties u kan helpen om code opnieuw te gebruiken. |