Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I Visual Basic möjliggör samvarians och kontravarians implicit referenskonvertering för matristyper, ombudstyper och allmänna typargument. Kovarians bevarar tilldelningskompatibiliteten och kontravariansen återställer den.
Följande kod visar skillnaden mellan tilldelningskompatibilitet, kovarians och kontravarians.
' 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
Kovarians för matriser möjliggör implicit konvertering av en matris av en mer härledd typ till en matris av en mindre härledd typ. Men den här åtgärden är inte typsäker, som du ser i följande kodexempel.
Dim array() As Object = New String(10) {}
' The following statement produces a run-time exception.
' array(0) = 10
Stöd för kovarians och kontravarians för metodgrupper möjliggör matchning av metodsignaturer med ombudstyper. Med den här matchningen kan du tilldela ett ombud inte bara en metod som har en matchande signatur, utan även en metod som:
- Returnerar en mer härledd typ (kovarians) än den returtyp som anges av delegetypen.
- Accepterar parametrar som har mindre härledda typer (kontravarians) än de som anges av delegetypen.
Mer information finns i Varians i Delegater (Visual Basic) och Använda Varians i Delegater (Visual Basic).
I följande kodexempel visas stöd för kovarians och kontravarians för metodgrupper.
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
I .NET Framework 4 eller senare stöder Visual Basic kovarians och kontravarians i generiska gränssnitt och delegerade och möjliggör implicit konvertering av generiska typparametrar. Mer information finns i Varians i Allmänna gränssnitt (Visual Basic) och Varians i Ombud (Visual Basic).
I följande kodexempel visas implicit referenskonvertering för generiska gränssnitt.
Dim strings As IEnumerable(Of String) = New List(Of String)
Dim objects As IEnumerable(Of Object) = strings
Ett generiskt gränssnitt eller ombud kallas variant om dess generiska parametrar deklareras som covarianta eller kontravarianta. Med Visual Basic kan du skapa egna variantgränssnitt och ombud. Mer information finns i Creating Variant Generic Interfaces (Visual Basic) and Variance in Delegates (Visual Basic).
Relaterade artiklar
| Titel | Beskrivning |
|---|---|
| Varians i allmänna gränssnitt (Visual Basic) | Diskuterar kovarians och kontravariant i generiska gränssnitt och innehåller en lista över generiska variantgränssnitt i .NET Framework. |
| Skapa generiska variantgränssnitt (Visual Basic) | Visar hur du skapar anpassade variantgränssnitt. |
| Använda varians i gränssnitt för generiska samlingar (Visual Basic) | Visar hur stöd för samvarians och kontravarians i gränssnitten IEnumerable<T> och IComparable<T> kan hjälpa dig att återanvända kod. |
| Varians i ombud (Visual Basic) | Diskuterar kovarians och kontravariation i generiska och icke-generiska delegater och innehåller en lista över varianter av generiska delegater i .NET Framework. |
| Använda varians i delegater (Visual Basic) | Visar hur du använder samvarians- och kontravariansstöd i icke-generiska delegater för att matcha metodsignaturer med delegattyper. |
| Använda varians för Func och Action generiska delegater (Visual Basic) | Visar hur kovarians och kontravarians i delegaterna Func och Action kan hjälpa dig att återanvända kod. |