Panduan: Menentukan Kelas yang Dapat Menyediakan Fungsionalitas Identik pada Berbagai Jenis Data (Visual Basic)
Anda dapat menentukan kelas tempat Anda dapat membuat objek yang menyediakan fungsionalitas identik pada jenis data yang berbeda. Untuk melakukan ini, Anda menentukan satu atau beberapa parameter jenis dalam penentuan. Kelas kemudian dapat berfungsi sebagai templat untuk objek yang menggunakan berbagai jenis data. Kelas yang ditentukan dengan cara ini disebut kelas generik.
Keuntungan menentukan kelas generik adalah Anda menentukannya hanya sekali, dan kode Anda dapat menggunakannya untuk membuat banyak objek yang menggunakan berbagai jenis data. Ini menghasilkan performa yang lebih baik daripada menentukan kelas dengan jenis Object
.
Selain kelas, Anda juga dapat menentukan dan menggunakan struktur, antarmuka, prosedur, dan delegasi generik.
Untuk menentukan kelas dengan parameter jenis
Tentukan kelas dengan cara normal.
Tambahkan
(Of
typeparameter)
segera setelah nama kelas untuk menentukan parameter jenis.Jika Anda memiliki lebih dari satu parameter jenis, buat daftar yang dipisahkan koma di dalam tanda kurung. Jangan ulangi kata kunci
Of
.Jika kode Anda melakukan operasi pada parameter jenis selain penugasan sederhana, ikuti parameter jenis tersebut dengan klausul
As
untuk menambahkan satu atau beberapa batasan. Batasan menjamin bahwa jenis yang disediakan untuk parameter jenis tersebut memenuhi persyaratan seperti berikut:Mendukung operasi, seperti
>
, yang dilakukan kode AndaMendukung anggota, seperti metode, yang diakses kode Anda
Mengekspos konstruktor tanpa parameter
Jika Anda tidak menentukan batasan apa pun, satu-satunya operasi dan anggota yang dapat digunakan kode Anda adalah yang didukung oleh Jenis Data Objek. Untuk informasi selengkapnya, lihat Daftar Jenis.
Identifikasi setiap anggota kelas yang akan dinyatakan dengan jenis yang disediakan, dan nyatakan
As
typeparameter
. Ini berlaku untuk penyimpanan internal, parameter prosedur, dan nilai pengembalian.Pastikan kode Anda hanya menggunakan operasi dan metode yang didukung oleh jenis data apa pun yang dapat disediakan ke
itemType
.Contoh berikut menentukan kelas yang mengelola daftar yang sangat sederhana. Ini menyimpan daftar dalam array
items
internal, dan kode penggunaan dapat mendeklarasikan jenis data elemen daftar. Konstruktor berparameter memungkinkan kode penggunaan untuk mengatur batas atasitems
, dan konstruktor tanpa parameter mengatur ini ke 9 (dengan total 10 item).Public Class simpleList(Of itemType) Private items() As itemType Private top As Integer Private nextp As Integer Public Sub New() Me.New(9) End Sub Public Sub New(ByVal t As Integer) MyBase.New() items = New itemType(t) {} top = t nextp = 0 End Sub Public Sub add(ByVal i As itemType) insert(i, nextp) End Sub Public Sub insert(ByVal i As itemType, ByVal p As Integer) If p > nextp OrElse p < 0 Then Throw New System.ArgumentOutOfRangeException("p", " less than 0 or beyond next available list position") ElseIf nextp > top Then Throw New System.ArgumentException("No room to insert at ", "p") ElseIf p < nextp Then For j As Integer = nextp To p + 1 Step -1 items(j) = items(j - 1) Next j End If items(p) = i nextp += 1 End Sub Public Sub remove(ByVal p As Integer) If p >= nextp OrElse p < 0 Then Throw New System.ArgumentOutOfRangeException("p", " less than 0 or beyond last list item") ElseIf nextp = 0 Then Throw New System.ArgumentException("List empty; cannot remove ", "p") ElseIf p < nextp - 1 Then For j As Integer = p To nextp - 2 items(j) = items(j + 1) Next j End If nextp -= 1 End Sub Public ReadOnly Property listLength() As Integer Get Return nextp End Get End Property Public ReadOnly Property listItem(ByVal p As Integer) As itemType Get If p >= nextp OrElse p < 0 Then Throw New System.ArgumentOutOfRangeException("p", " less than 0 or beyond last list item") End If Return items(p) End Get End Property End Class
Anda dapat mendeklarasikan kelas dari
simpleList
untuk menyimpan daftar nilaiInteger
, kelas lain untuk menyimpan daftar nilaiString
, dan kelas lain untuk menyimpan nilaiDate
. Kecuali untuk jenis data anggota daftar, objek yang dibuat dari semua kelas ini berperilaku identik.Argumen jenis yang disediakan kode penggunaan ke
itemType
dapat berupa jenis intrinsik sepertiBoolean
atauDouble
, struktur, enumerasi, atau jenis kelas apa pun, termasuk yang ditentukan aplikasi Anda.Anda dapat menguji kelas
simpleList
dengan kode berikut.Public Sub useSimpleList() Dim iList As New simpleList(Of Integer)(2) Dim sList As New simpleList(Of String)(3) Dim dList As New simpleList(Of Date)(2) iList.add(10) iList.add(20) iList.add(30) sList.add("First") sList.add("extra") sList.add("Second") sList.add("Third") sList.remove(1) dList.add(#1/1/2003#) dList.add(#3/3/2003#) dList.insert(#2/2/2003#, 1) Dim s = "Simple list of 3 Integer items (reported length " & CStr(iList.listLength) & "):" & vbCrLf & CStr(iList.listItem(0)) & vbCrLf & CStr(iList.listItem(1)) & vbCrLf & CStr(iList.listItem(2)) & vbCrLf & "Simple list of 4 - 1 String items (reported length " & CStr(sList.listLength) & "):" & vbCrLf & CStr(sList.listItem(0)) & vbCrLf & CStr(sList.listItem(1)) & vbCrLf & CStr(sList.listItem(2)) & vbCrLf & "Simple list of 2 + 1 Date items (reported length " & CStr(dList.listLength) & "):" & vbCrLf & CStr(dList.listItem(0)) & vbCrLf & CStr(dList.listItem(1)) & vbCrLf & CStr(dList.listItem(2)) MsgBox(s) End Sub
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk