Out (Általános módosító) (Visual Basic)
Általános típusparaméterek esetén a Out
kulcsszó azt határozza meg, hogy a típus kovariant.
Megjegyzések
A kovariancia lehetővé teszi, hogy az általános paraméter által megadottnál származtatottabb típust használjon. Ez lehetővé teszi a variáns interfészeket megvalósító osztályok implicit átalakítását és a delegált típusok implicit konvertálását.
További információ: Kovariancia és Contravariance.
Szabályok
A kulcsszót Out
általános felületeken és meghatalmazottakban is használhatja.
Egy általános felületen a típusparaméter kovarianitként deklarálható, ha megfelel a következő feltételeknek:
A típusparaméter csak az interfészmetódusok visszatérési típusaként használatos, és nem használható metódusargumentumok típusaként.
Feljegyzés
A szabály alól egyetlen kivétel van. Ha a kovátriai felületen egy contravariant generic delegált van metódusparaméterként, a kovariant típust általános típusparaméterként használhatja ehhez a delegálthoz. A kovariant és a contravariant általános meghatalmazottakról további információt a Delegáltak varianciája és a Variance használata func és action generic meghatalmazottakhoz című témakörben talál.
A típusparaméter nem általános kényszerként használatos az interfészmetelyekhez.
Egy általános delegált típusparaméter akkor deklarálható kovariantként, ha csak metódus-visszatérési típusként használatos, és nem használható metódusargumentumokhoz.
A kovariancia és a kovariancia támogatott a referenciatípusok esetében, de értéktípusok esetében nem támogatottak.
A Visual Basicben nem deklarálhat eseményeket kovariáns felületeken a delegált típus megadása nélkül. A kovátriai felületek nem tartalmazhatnak beágyazott osztályokat, számokat vagy struktúrákat, de beágyazott interfészekkel is rendelkezhetnek.
Működés
A kovariáns típusú paraméterrel rendelkező interfészek lehetővé teszik, hogy metódusai a típusparaméter által megadottaknál több származtatott típust adjanak vissza. Mivel például a 4. .NET-keretrendszer A IEnumerable<T>típus kovarianciáns, a típus objektumát IEnumerable(Of String)
speciális átalakítási módszerek használata nélkül rendelheti hozzá a IEnumerable(Of Object)
típus objektumához.
A kovariáns delegáltak egy másik, azonos típusú delegáltat is hozzárendelhetnek, de származtatottabb általános típusparaméterrel.
1. példa
Az alábbi példa bemutatja, hogyan deklarálhat, bővíthet és implementálhat egy kovariantikus általános felületet. Azt is bemutatja, hogyan használhat implicit konverziót a kovariantikus felületet implementáló osztályokhoz.
' Covariant interface.
Interface ICovariant(Of Out R)
End Interface
' Extending covariant interface.
Interface IExtCovariant(Of Out R)
Inherits ICovariant(Of R)
End Interface
' Implementing covariant interface.
Class Sample(Of R)
Implements ICovariant(Of R)
End Class
Sub Main()
Dim iobj As ICovariant(Of Object) = New Sample(Of Object)()
Dim istr As ICovariant(Of String) = New Sample(Of String)()
' You can assign istr to iobj because
' the ICovariant interface is covariant.
iobj = istr
End Sub
2. példa
Az alábbi példa bemutatja, hogyan deklarálhat, hozhat létre és hívhat meg kovariant általános meghatalmazottat. Azt is bemutatja, hogyan használhat implicit konverziót delegált típusok esetén.
' Covariant delegate.
Public Delegate Function DCovariant(Of Out R)() As R
' Methods that match the delegate signature.
Public Shared Function SampleControl() As Control
Return New Control()
End Function
Public Shared Function SampleButton() As Button
Return New Button()
End Function
Private Sub Test()
' Instantiating the delegates with the methods.
Dim dControl As DCovariant(Of Control) =
AddressOf SampleControl
Dim dButton As DCovariant(Of Button) =
AddressOf SampleButton
' You can assign dButton to dControl
' because the DCovariant delegate is covariant.
dControl = dButton
' Invoke the delegate.
dControl()
End Sub