Porady: definiowanie klasy, która może zapewnić identyczną funkcjonalność różnych typów danych (Visual Basic)

Można zdefiniować klasę, z której można tworzyć obiektów, które zapewniają funkcjonalność identyczne na różnych typach danych.Aby to zrobić, należy określić jeden lub więcej Parametry typu w definicji.Klasa może następnie służyć jako szablon dla obiektów, które używają różnych typów danych.Klasy zdefiniowane w ten sposób jest nazywany klasą rodzajową.

Definiowanie klasy rodzajowe zaletą jest, że wystarczy raz zdefiniować i kod służy do tworzenia wielu obiektów, które wykorzystują różnorodne typy danych.Powoduje to lepszą wydajność niż Definiowanie klasy z Object typu.

W uzupełnieniu do klas można również zdefiniować i użyć rodzajowy struktur, interfejsy, procedur i delegatów.

Aby zdefiniować klasę z parametrem typu

  1. Definiowanie klasy w normalny sposób.

  2. Dodaj (Oftypeparameter) zaraz po nazwie klasy do określenia parametru typu. 

  3. Jeśli masz więcej niż jeden parametr typu, należy wprowadzić rozdzielana przecinkami lista wewnątrz nawiasów.Nie należy powtórzyć Of słowa kluczowego.

  4. Jeśli kod wykonuje operacje na parametr typu innego niż proste przypisanie, postępuj zgodnie z tego parametru typu z As klauzuli, aby dodać jeden lub więcej ograniczenia.Ograniczenie gwarancji, że podany dla tego parametru typu typ spełnia wymóg, takich jak:

    • Obsługuje operacji, takich jak >, który wykonuje swój kod

    • Obsługuje członka, takie jak metoda, która uzyskuje dostęp do kodu

    • Opisuje konstruktora bez parametrów

    Jeśli nie określisz żadnych ograniczeń, tylko operacje i członków, można użyć kodu są obsługiwane przez Object — typ danych.Aby uzyskać więcej informacji, zobacz Lista typów (Visual Basic).

  5. Identyfikacji każdego członka klasy, który ma zostać zadeklarowane z typem dostarczony i zadeklarowania go Astypeparameter. Dotyczy to wewnętrznych systemów pamięci masowej, procedury parametry i wartości zwracane.

  6. Pamiętaj, że Twój kod używa tylko operacje i metody, które są obsługiwane przez dowolnego typu danych, można go dostarczyć do itemType.

    Poniższy przykład definiuje klasy, który zarządza listą bardzo proste.Przechowuje w tablicy wewnętrznej listy itemsoraz przy użyciu kodu można zadeklarować typ danych, elementów listy.Konstruktor sparametryzowana umożliwia używanie kodu i ustawia górną granicę items, i domyślnego konstruktora ustawia to 9 (dla wszystkich elementów 10).

    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
    

    Można zadeklarować klasy z simpleList do przechowywania listy z Integer wartości innej klasy do przechowywania listy z String wartości, a inny do przechowywania Date wartości.Z wyjątkiem dla typu danych członków listy obiekty utworzone na podstawie tych klas zachowują się identycznie.

    Argument typu, że przy użyciu kodu dostaw do itemType może być typu wewnętrzne takich jak Boolean lub Double, struktury, wyliczenia lub dowolnego typu klasy, łącznie z jedną, która definiuje aplikacja.

    Można przetestować klasy simpleList z następującego kodu.

    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
    

Zobacz też

Zadania

Porady: używanie klasy ogólnej (Visual Basic)

Informacje

Of — Klauzula (Visual Basic)

Lista typów (Visual Basic)

Object — typ danych

Koncepcje

Typy danych w Visual Basic

Typy ogólne w Visual Basic (Visual Basic)

Niezależność od języka i elementy niezależne od języka