Bagikan melalui


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

  1. Tentukan kelas dengan cara normal.

  2. Tambahkan (Of typeparameter) segera setelah nama kelas untuk menentukan parameter jenis.

  3. Jika Anda memiliki lebih dari satu parameter jenis, buat daftar yang dipisahkan koma di dalam tanda kurung. Jangan ulangi kata kunci Of.

  4. 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 Anda

    • Mendukung 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.

  5. 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.

  6. 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 atas items, 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 nilai Integer, kelas lain untuk menyimpan daftar nilai String, dan kelas lain untuk menyimpan nilai Date. 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 seperti Boolean atau Double, 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