Sdílet prostřednictvím


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)

Koncepty

Odchylka v obecné rozhraní (C# a Visual Basic)