Megosztás a következőn keresztül:


Útmutató: Azonos funkciókat biztosító osztály definiálása különböző adattípusokon (Visual Basic)

Meghatározhat egy osztályt, amelyből olyan objektumokat hozhat létre, amelyek azonos funkciókat biztosítanak a különböző adattípusokon. Ehhez meg kell adnia egy vagy több típusparamétert a definícióban. Az osztály ezután sablonként szolgálhat a különböző adattípusokat használó objektumokhoz. Az ilyen módon definiált osztályokat általános osztálynak nevezzük.

Az általános osztály definiálásának előnye, hogy csak egyszer definiálja, és a kód segítségével számos olyan objektumot hozhat létre, amelyek sokféle adattípust használnak. Ez jobb teljesítményt eredményez, mint az osztály típussal való Object definiálása.

Az osztályok mellett általános struktúrákat, interfészeket, eljárásokat és meghatalmazottakat is definiálhat és használhat.

Típusparaméterrel rendelkező osztály definiálása

  1. Az osztályt a szokásos módon definiálhatja.

  2. Adjon hozzá (Oftípusparamétert) közvetlenül az osztály neve után egy típusparaméter megadásához.

  3. Ha több típusparaméterrel rendelkezik, hozzon létre egy vesszővel tagolt listát a zárójelek között. Ne ismételje meg a kulcsszót Of .

  4. Ha a kód az egyszerű hozzárendelésen kívül más típusparaméteren hajt végre műveleteket, kövesse az adott típusparamétert egy záradékkal egy As vagy több korlátozás hozzáadásához. A kényszer garantálja, hogy az adott típusparaméterhez megadott típus megfelel az alábbi követelményeknek:

    • Támogatja a műveletet, például >a kód által végrehajtott műveleteket

    • Támogatja a kód által elért tagokat( például metódusokat)

    • Paraméter nélküli konstruktort tesz elérhetővé

    Ha nem határoz meg korlátozásokat, a kód csak az objektum adattípus által támogatott műveleteket és tagokat használhatja. További információ: Típuslista.

  5. Azonosítsa a megadott típussal deklarálandó összes osztálytagot, és deklarálja.Astypeparameter Ez a belső tárolásra, az eljárás paramétereire és a visszatérési értékekre vonatkozik.

  6. Győződjön meg arról, hogy a kód csak olyan műveleteket és metódusokat használ, amelyeket bármilyen adattípus támogat.itemType

    Az alábbi példa egy nagyon egyszerű listát kezelő osztályt definiál. A belső tömbben itemstárolja a listát, a használó kód pedig deklarálhatja a listaelemek adattípusát. A paraméteres konstruktorok lehetővé teszik a kód használatával a felső határ beállítását items, és a paraméter nélküli konstruktor ezt 9-re állítja (összesen 10 elem esetén).

    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
    

    Deklarálhat egy osztályt simpleList az értékek listájának Integer tárolásához, egy másik osztályt az értékek listájának String tárolásához, egy másikat pedig az értékek tárolásához Date . A listatagok adattípusán kívül az összes ilyen osztályból létrehozott objektumok ugyanúgy viselkednek.

    Az a típusargumentum, amelyet a kódkészletek itemType használata belső típus lehet, például Boolean vagy Double, struktúra, enumerálás vagy bármilyen osztálytípus, beleértve az alkalmazás által definiált típust is.

    Az osztályt simpleList az alábbi kóddal tesztelheti.

    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
    

Lásd még