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.
A Visual Basicben a kovariancia és a contravariance lehetővé teszi a tömbtípusok, delegálttípusok és általános típusargumentumok implicit referenciaátalakítását. A kovariancia megőrzi a hozzárendelés kompatibilitását, és a kontravariancia megfordítja azt.
Az alábbi kód bemutatja a hozzárendelés kompatibilitása, a kovariancia és a contravariance közötti különbséget.
' 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
A tömbök kovarianciája lehetővé teszi a származtatottabb típusú tömbök implicit átalakítását kevésbé származtatott típusú tömbökké. Ez a művelet azonban nem biztonságos, ahogy az alábbi kód példában is látható.
Dim array() As Object = New String(10) {}
' The following statement produces a run-time exception.
' array(0) = 10
A metóduscsoportok kovariancia- és ellenvariancia-támogatása lehetővé teszi a metódusadák delegálási típusokkal való egyeztetését. Ez az egyeztetés lehetővé teszi, hogy egy meghatalmazotthoz ne csak egyező aláírással rendelkező metódust rendeljen, hanem egy olyan metódust is, amely:
- A delegált típus által megadott visszatérési típusnál származtatottabb típust (kovarianciát) ad vissza.
- Olyan paramétereket fogad el, amelyek kevésbé származtatott típusok (ellentravarianciával) rendelkeznek, mint a delegált típus által megadottak.
További információ: Variance in Delegates (Visual Basic) és Using Variance in Delegates (Visual Basic).
Az alábbi példakód a metóduscsoportok kovariancia- és ellenvariancia-támogatását mutatja be.
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
A .NET-keretrendszer 4-es vagy újabb verzióiban a Visual Basic támogatja a kovarianciát és a contravariance-t az általános felületeken és delegáltakban, és lehetővé teszi az általános típusú paraméterek implicit átalakítását. További információ: Variance in Generic Interfaces (Visual Basic) és Variance in Delegates (Visual Basic).
Az alábbi kódpéldában az általános felületek implicit referenciakonverziója látható.
Dim strings As IEnumerable(Of String) = New List(Of String)
Dim objects As IEnumerable(Of Object) = strings
Az általános interfészt vagy delegáltat variánsnak nevezzük, ha az általános paraméterei kovariantnak vagy contravariantnak vannak deklarálva. A Visual Basic lehetővé teszi, hogy saját variáns felületeket és meghatalmazottakat hozzon létre. További információért lásd a Variant Generic Interfaces (Visual Basic) és a Variance in Delegates (Visual Basic) cím oldalakat.
Kapcsolódó cikkek
| Cím | Leírás |
|---|---|
| Variancia általános felületeken (Visual Basic) | A kovarianciát és a contravariance-t tárgyalja az általános felületeken, és a .NET-keretrendszerben megjeleníti a variáns általános interfészek listáját. |
| Általános variáns interfészek létrehozása (Visual Basic) | Bemutatja, hogyan hozhat létre egyéni változati felületeket. |
| Variancia használata általános gyűjteményekhez készült felületeken (Visual Basic) | Bemutatja, hogy a kovariancia és a kontravariancia támogatása a IEnumerable<T> és IComparable<T> felületeken hogyan segíthet a kód újrafelhasználásában. |
| Variancia a meghatalmazottakban (Visual Basic) | Az általános és nem általános meghatalmazottak kovarianciáját és ellentravarianciáját ismerteti, és a .NET-keretrendszerben megjeleníti a variáns általános meghatalmazottak listáját. |
| Variancia használata a küldöttekben (Visual Basic) | Bemutatja, hogyan használható a kovariancia és kontravariancia a nem generikus delegáltakban a metódusaláírások és delegálttípusok egyeztetésére. |
| Variancia használata Func- és Action Generic-meghatalmazottakhoz (Visual Basic) | Bemutatja, hogy a kovariancia és a kontravariancia támogatása a Func és Action delegáltaknál hogyan segíthet a kód újbóli felhasználásában. |