Mimo (Generic modifikátor) (Visual Basic)
Obecný typ parametrů Out klíčové slovo určuje typ je covariant.
Poznámky
Kovariance můžete použít typ odvozený více než určený parametrem obecný.To umožňuje implicitní převod třídy, které implementují rozhraní variant a implicitní převod typů delegátů.
Další informace naleznete v tématu Kovariance a Contravariance (C# a Visual Basic).
Pravidla
Můžete použít Out klíčové slovo v obecné rozhraní a delegáty.
V obecné rozhraní mohou být deklarovány parametr typu covariant, pokud splňuje následující podmínky:
Parametr typu je použita pouze jako návratový typ metody rozhraní a není použit jako typ argumenty metody.
[!POZNÁMKA]
Jedinou výjimkou tohoto pravidla je.Pokud v covariant rozhraní contravariant obecný delegáta jako parametr metody, můžete jako obecný typ parametru typu covariant pro tento delegát.Další informace o covariant a contravariant obecný delegátů, viz Rozptyl Delegáti (C# a Visual Basic) a Použití odchylky pro Func a akce obecný Delegáti (C# a Visual Basic).
Parametr typu nepoužívá jako obecný omezení pro metody rozhraní.
V obecné delegát parametr typu lze deklarovat covariant, pokud je použita pouze jako návratový typ metody a nejsou použity pro argumenty metody.
Kovariance a contravariance jsou podporovány pro typy odkazů, ale nejsou podporovány pro typy hodnot.
V jazyce Visual Basic nelze deklarovat bez určení typ delegáta události v covariant rozhraní.Také covariant rozhraní vnořené třídy, výčty nebo struktury, ale jejich mohou vnořené rozhraní.
Chování
Rozhraní covariant typ parametru umožňuje jeho metody vrátit více odvozené typy než zadaný v parametru typu.Například protože v.NET Framework 4, v IEnumerable<T>, je typ t covariant, můžete přiřadit objekt IEnumerabe(Of String) typu objektu IEnumerable(Of Object) typu bez použití jakékoli zvláštní převodu metody.
Covariant delegáta lze přiřadit delegáta jiné stejného typu, ale s více odvozený obecný typ parametru.
Příklad
Následující příklad ukazuje, jak deklarovat, rozšiřovat a covariant obecné rozhraní.Také ukazuje, jak použít implicitní převod pro třídy, které implementují rozhraní covariant.
' 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
Následující příklad ukazuje, jak deklarovat konkretizovat a vyvolat covariant obecný delegáta.Také ukazuje, jak můžete použít implicitní převod typů delegáta.
' 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
Viz také
Referenční dokumentace
V (Generic modifikátor) (Visual Basic)