Sdílet prostřednictvím


In (generický modifikátor) (Visual Basic)

Obecný typ parametrů In klíčové slovo určuje, že parametr typu contravariant.

Poznámky

Contravariance umožňuje použít méně odvozený typ než určenou 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 kontravariance (C# and Visual Basic).

Pravidla

Můžete použít In klíčové slovo v obecné rozhraní a delegáty.

Parametr typu lze deklarovat contravariant obecné rozhraní nebo delegáta, pokud je použita pouze jako typ argumenty metody a není použit jako návratový typ metody.ByRefparametry nemohou být covariant nebo contravariant.

Jsou podporovány pro typy odkazů a nejsou podporovány pro typy hodnot kovariance a contravariance.

V jazyce Visual Basic nelze deklarovat bez určení typ delegáta události v rozhraní contravariant.Také rozhraní contravariant vnořené třídy, výčty nebo struktury, ale jejich mohou vnořené rozhraní.

Chování

Rozhraní, které má parametr typu contravariant umožňuje jeho metody přijmout argumenty méně odvozené typy než zadaný v parametru typu rozhraní.Například protože v.NET Framework 4, v IComparer rozhraní, je typ t contravariant, můžete přiřadit objektu IComparer(Of Person) typu objektu IComparer(Of Employee) typu bez použití jakékoli zvláštní převodu metod, pokud Person dědí Employee.

Delegát contravariant lze přiřadit delegáta jiné stejného typu, ale s méně odvozený obecný typ parametru.

Příklad

Následující příklad ukazuje, jak deklarovat, rozšiřovat a obecné rozhraní contravariant.Také ukazuje, jak můžete použít implicitní převod pro třídy, které implementují rozhraní.

' Contravariant interface. 
Interface IContravariant(Of In A)
End Interface 

' Extending contravariant interface. 
Interface IExtContravariant(Of In A)
    Inherits IContravariant(Of A)
End Interface 

' Implementing contravariant interface. 
Class Sample(Of A)
    Implements IContravariant(Of A)
End Class 

Sub Main()
    Dim iobj As IContravariant(Of Object) = New Sample(Of Object)()
    Dim istr As IContravariant(Of String) = New Sample(Of String)()

    ' You can assign iobj to istr, because 
    ' the IContravariant interface is contravariant.
    istr = iobj
End Sub

Následující příklad ukazuje, jak deklarovat konkretizovat a vyvolat contravariant obecný delegáta.Také ukazuje, jak implicitně převést typ delegáta.

' Contravariant delegate. 
Public Delegate Sub DContravariant(Of In A)(ByVal argument As A)

' Methods that match the delegate signature. 
Public Shared Sub SampleControl(ByVal control As Control)
End Sub 

Public Shared Sub SampleButton(ByVal control As Button)
End Sub 

Private Sub Test()

    ' Instantiating the delegates with the methods. 
    Dim dControl As DContravariant(Of Control) =
        AddressOf SampleControl
    Dim dButton As DContravariant(Of Button) =
        AddressOf SampleButton

    ' You can assign dControl to dButton 
    ' because the DContravariant delegate is contravariant.
    dButton = dControl

    ' Invoke the delegate.
    dButton(New Button())
End Sub

Viz také

Referenční dokumentace

Out (generický modifikátor) (Visual Basic)

Koncepty

Odchylky obecných rozhraní (C# and Visual Basic)