Udostępnij za pośrednictwem


Out (modyfikator ogólny) (Visual Basic)

Parametry typu rodzajowego Out słowa kluczowego Określa, że typu kowariantnego.

Uwagi

Kowariancja umożliwia korzystanie z bardziej pochodny typ niż określony przez parametr rodzajowy.Pozwala to na niejawna konwersja klasy, które implementują interfejsy wariantu i niejawna konwersja typu obiektu delegowanego.

Aby uzyskać więcej informacji, zobacz Kowariancja i kontrawariancja (C# i Visual Basic).

Zasady

Można użyć Out słowa kluczowego w interfejsach rodzajowy i delegatów.

W interfejsie rodzajowy parametru typu może być deklarowana kowariantnego, jeśli spełnia następujące warunki:

  • Parametr typu jest używany tylko jako zwracany typ metody interfejsu i nie są używane jako typ argumenty tej metody.

    [!UWAGA]

    Istnieje jeden wyjątek od tej zasady.Jeśli w interfejsie kowariantnego kontrawariantnego Delegat rodzajowy jako parametr metody, można użyć typu kowariantnego jako parametr typu rodzajowego dla tego obiektu delegowanego.Aby uzyskać więcej informacji na temat kowariantnego i kontrawariantnego delegatów rodzajowy, zobacz Wariancje w delegatach (C# i Visual Basic) i Korzystanie z wariancji dla delegatów Func i Action (C# i Visual Basic).

  • Parametr typu nie jest używany jako rodzajowy ograniczenia dla metod interfejsu.

W Delegat rodzajowy parametru typu może być deklarowana kowariantnego, jeśli jest używane tylko jako typ zwracany metody i nie jest używany dla argumentów metody.

Kowariancja i kontrawariancja są obsługiwane dla typu odwołania, ale nie są obsługiwane dla typów wartości.

W języku Visual Basic nie można zadeklarować zdarzenia w interfejsach kowariantnego bez określania typu obiektu delegowanego.Ponadto kowariantnego interfejsów nie można posiadać zagnieżdżonych klas, teksty stałe lub struktur, ale mogą być zagnieżdżone interfejsów.

Zachowanie

Interfejs, który ma parametr typu kowariantnego umożliwia jej metody zwracały więcej Typy pochodne niż wartość określona przez parametr typu.Na przykład ponieważ w.NET Framework 4, w IEnumerable, typu t jest kowariantnego, można przypisać obiekt IEnumerabe(Of String) typu obiektu z IEnumerable(Of Object) typu bez metody konwersji specjalne.

Kowariantnego pełnomocnik może być przypisany do innego obiektu delegowanego tego samego typu, ale z bardziej pochodny, parametr typu rodzajowego.

Przykład

Poniższy przykład pokazuje, jak zadeklarować, rozszerzenie i implementować kowariantnego interfejs generic.Pokazuje również, jak używać niejawna konwersja dla klasy, które implementują interfejs kowariantnego.

' 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

Poniższy przykład pokazuje, jak zadeklarować, wystąpienia i wywoływać kowariantnego Delegat rodzajowy.Pokazuje również, w jaki sposób można użyć niejawna konwersja dla typów obiektów delegowanych.

' 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

Zobacz też

Informacje

In (modyfikator ogólny) (Visual Basic)

Koncepcje

Wariancje w interfejsach (C# i Visual Basic)