Bagikan melalui


Keluar (Pengubah Generik) (Visual Basic)

Untuk parameter jenis generik, kata kunci Out menetapkan bahwa parameter jenis adalah kovarian.

Keterangan

Kovarians memungkinkan Anda untuk menggunakan jenis turunan daripada yang ditentukan oleh parameter generik. Hal ini mengizinkan konversi implisit kelas yang mengimplementasikan antarmuka varian dan konversi implisit jenis delegasi.

Untuk informasi selengkapnya, lihat Kovarian dan Kontravarian.

Aturan

Anda dapat menggunakan kata kunci Out di antarmuka generik dan delegasi.

Dalam antarmuka generik, parameter jenis dapat dideklarasikan sebagai kovarian jika memenuhi kondisi berikut:

  • Parameter jenis hanya digunakan sebagai jenis pengembalian metode antarmuka dan tidak digunakan sebagai jenis argumen metode.

    Catatan

    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 Varian dalam Delegasi dan Menggunakan Varians untuk Delegasi Generik Fungsi dan Tindakan.

  • Parameter jenis tidak digunakan sebagai batasan umum untuk metode antarmuka.

Dalam delegasi generik, jenis parameter dapat dinyatakan kovarian jika hanya digunakan sebagai jenis pengembalian metode dan tidak digunakan untuk argumen metode.

Kovarian dan kontravarian didukung untuk jenis referensi, tetapi tidak didukung untuk jenis nilai.

Dalam 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 bersarang, tetapi mereka dapat memiliki antarmuka bersarang.

Perilaku

Antarmuka yang memiliki parameter jenis kovarian memungkinkan metodenya mengembalikan lebih banyak jenis turunan daripada yang ditentukan oleh jenis parameter. Misalnya, karena di .NET Framework 4, di IEnumerable<T>, jenis T adalah kovarian, Anda dapat menetapkan objek berjenis IEnumerable(Of String) ke objek berjenis IEnumerable(Of Object) tanpa menggunakan metode konversi khusus apa pun.

Delegasi kovarian dapat diberikan delegasi lain dengan jenis yang sama, tetapi dengan parameter jenis generik yang diturunkan.

Contoh 1

Contoh berikut menunjukkan cara mendeklarasikan, memperluas, dan mengimplementasikan antarmuka generik kovarian. Ini juga menunjukkan cara menggunakan konversi implisit untuk kelas yang menerapkan 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, instantiate, 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

Lihat juga