Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Untuk parameter jenis generik, Out kata kunci menentukan bahwa jenisnya kovarian.
Komentar
Kovarians memungkinkan Anda menggunakan jenis yang lebih turunan dari yang ditentukan oleh parameter generik. Ini memungkinkan konversi implisit kelas yang menerapkan antarmuka varian dan konversi implisit jenis delegasi.
Untuk informasi selengkapnya, lihat Kovariansi dan Kontravariansi.
Aturan
Anda dapat menggunakan Out kata kunci di antarmuka generik dan delegasi.
Dalam antarmuka generik, parameter jenis dapat dinyatakan kovarian jika memenuhi kondisi berikut:
Parameter jenis hanya digunakan sebagai jenis pengembalian metode antarmuka dan tidak digunakan sebagai jenis argumen metode.
Nota
Ada satu pengecualian untuk aturan ini. Jika dalam antarmuka kovarian, Anda memiliki delegasi generik kontravarian sebagai parameter metode, Anda dapat menggunakan jenis kovarian sebagai parameter jenis generik untuk delegasi ini. Untuk informasi selengkapnya tentang delegasi generik kovarian dan kontravarian, lihat Varians dalam Delegasi dan Menggunakan Varians untuk Delegasi Generik Func dan Tindakan.
Parameter jenis tidak digunakan sebagai batasan generik untuk metode antarmuka.
Dalam delegasi generik, parameter jenis dapat dinyatakan kovarian jika hanya digunakan sebagai jenis pengembalian metode dan tidak digunakan untuk argumen metode.
Kovariansi dan kontravariansi didukung untuk jenis referensi, tetapi tidak didukung untuk jenis nilai.
Di Visual Basic, Anda tidak dapat mendeklarasikan peristiwa dalam antarmuka kovarian tanpa menentukan jenis delegasi. Selain itu, antarmuka kovarian tidak dapat memiliki kelas, enum, atau struktur berlapis, tetapi dapat memiliki antarmuka berlapis.
Perilaku
Antarmuka yang memiliki parameter jenis kovarian memungkinkan metodenya untuk mengembalikan jenis yang lebih turunan daripada yang ditentukan oleh parameter jenis. Misalnya, karena dalam .NET Framework 4, di IEnumerable<T>, jenis T kovarian, Anda dapat menetapkan objek jenis IEnumerable(Of String) ke objek jenis IEnumerable(Of Object) tanpa menggunakan metode konversi khusus apa pun.
Delegasi kovarian dapat ditetapkan delegasi lain dengan jenis yang sama, tetapi dengan parameter jenis generik yang lebih turunan.
Contoh 1
Contoh berikut menunjukkan cara mendeklarasikan, memperluas, dan mengimplementasikan antarmuka generik kovarian. Ini juga menunjukkan cara menggunakan konversi implisit untuk kelas yang mengimplementasikan antarmuka kovarian.
' 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
Contoh 2
Contoh berikut menunjukkan cara mendeklarasikan, membuat instans, dan memanggil delegasi generik kovarian. Ini juga menunjukkan bagaimana Anda dapat menggunakan konversi implisit untuk jenis delegasi.
' 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