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.
Di Visual Basic, kovariansi dan kontravarian memungkinkan konversi referensi implisit untuk jenis array, jenis delegasi, dan argumen jenis generik. Kovariansi mempertahankan kompatibilitas penugasan dan kontravariansi membalikkannya.
Kode berikut menunjukkan perbedaan antara kompatibilitas penugasan, kovarians, dan kontravariansi.
' Assignment compatibility.
Dim str As String = "test"
' An object of a more derived type is assigned to an object of a less derived type.
Dim obj As Object = str
' Covariance.
Dim strings As IEnumerable(Of String) = New List(Of String)()
' An object that is instantiated with a more derived type argument
' is assigned to an object instantiated with a less derived type argument.
' Assignment compatibility is preserved.
Dim objects As IEnumerable(Of Object) = strings
' Contravariance.
' Assume that there is the following method in the class:
' Shared Sub SetObject(ByVal o As Object)
' End Sub
Dim actObject As Action(Of Object) = AddressOf SetObject
' An object that is instantiated with a less derived type argument
' is assigned to an object instantiated with a more derived type argument.
' Assignment compatibility is reversed.
Dim actString As Action(Of String) = actObject
Kovarians untuk array memungkinkan konversi implisit dari array tipe yang lebih spesifik ke array tipe yang lebih umum. Tetapi operasi ini tidak mengetik dengan aman, seperti yang ditunjukkan dalam contoh kode berikut.
Dim array() As Object = New String(10) {}
' The following statement produces a run-time exception.
' array(0) = 10
Dukungan kovariansi dan kontravariansi untuk grup metode memungkinkan pencocokan tanda tangan metode dengan jenis delegasi. Pencocokan ini memungkinkan Anda menetapkan ke delegasi tidak hanya metode yang memiliki tanda tangan yang cocok, tetapi juga metode yang:
- Mengembalikan jenis yang lebih spesifik (kovarians) daripada jenis pengembalian yang ditentukan oleh jenis delegasi.
- Menerima parameter yang memiliki jenis turunan lebih rendah (kontravarians) daripada yang ditentukan oleh tipe delegasi.
Untuk informasi selengkapnya, lihat Varians di Delegasi (Visual Basic) dan Menggunakan Varians di Delegasi (Visual Basic).
Contoh kode berikut menunjukkan dukungan kovarians dan kontravariansi untuk grup metode.
Shared Function GetObject() As Object
Return Nothing
End Function
Shared Sub SetObject(ByVal obj As Object)
End Sub
Shared Function GetString() As String
Return ""
End Function
Shared Sub SetString(ByVal str As String)
End Sub
Shared Sub Test()
' Covariance. A delegate specifies a return type as object,
' but you can assign a method that returns a string.
Dim del As Func(Of Object) = AddressOf GetString
' Contravariance. A delegate specifies a parameter type as string,
' but you can assign a method that takes an object.
Dim del2 As Action(Of String) = AddressOf SetObject
End Sub
Di .NET Framework 4 atau yang lebih baru, Visual Basic mendukung kovariansi dan kontravariansi dalam antarmuka dan delegasi generik dan memungkinkan konversi implisit parameter jenis generik. Untuk informasi selengkapnya, lihat Varians dalam Antarmuka Generik (Visual Basic) dan Varians di Delegasi (Visual Basic).
Contoh kode berikut menunjukkan konversi referensi implisit untuk antarmuka generik.
Dim strings As IEnumerable(Of String) = New List(Of String)
Dim objects As IEnumerable(Of Object) = strings
Antarmuka atau delegasi generik disebut varian jika parameter generiknya dinyatakan kovarian atau kontravarian. Visual Basic memungkinkan Anda membuat antarmuka dan delegasi varian Anda sendiri. Untuk informasi selengkapnya, lihat Membuat Antarmuka Generik Varian (Visual Basic) dan Varians dalam Delegasi (Visual Basic).
Artikel terkait
| Judul | Deskripsi |
|---|---|
| Variansi dalam Antarmuka Generik (Visual Basic) | Membahas kovariansi dan kontravariansi dalam antarmuka generik dan menyediakan daftar antarmuka generik varian dalam .NET Framework. |
| Membuat Antarmuka Generik Varian (Visual Basic) | Memperlihatkan cara membuat antarmuka varian kustom. |
| Menggunakan Varians dalam Antarmuka untuk Koleksi Generik (Visual Basic) | Menunjukkan bagaimana dukungan kovariansi dan kontravariansi di IEnumerable<T> antarmuka dan IComparable<T> dapat membantu Anda menggunakan kembali kode. |
| Variansi dalam Delegasi (Visual Basic) | Membahas kovarian dan kontravariansi pada delegasi generik serta non-generik, dan menyediakan daftar delegasi varian generik dalam .NET Framework. |
| Menggunakan Varian dalam Delegasi (Visual Basic) | Menunjukkan cara menggunakan dukungan kovariansi dan kontravariansi dalam delegasi non-generik untuk menyelaraskan tanda tangan metode dengan tipe delegasi. |
| Menggunakan Variasi untuk Pendelegasian Generik Func dan Action (Visual Basic) | Menunjukkan bagaimana dukungan kovarians dan kontravariansi pada delegasi Func dan Action dapat membantu Anda menggunakan kembali kode. |