Out (Generic modyfikator) (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 WARIANCJA delegatów (C# i Visual Basic) i Za pomocą wariancji dla Func i działania delegatów rodzajowy (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<T>, 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
W (Generic modyfikator) (Visual Basic)