Delen via


Procedure: Een klasse definiëren die identieke functionaliteit kan bieden voor verschillende gegevenstypen (Visual Basic)

U kunt een klasse definiëren waaruit u objecten kunt maken die identieke functionaliteit bieden voor verschillende gegevenstypen. Hiervoor geeft u een of meer typeparameters op in de definitie. De klasse kan vervolgens fungeren als een sjabloon voor objecten die verschillende gegevenstypen gebruiken. Een klasse die op deze manier is gedefinieerd, wordt een algemene klasse genoemd.

Het voordeel van het definiëren van een algemene klasse is dat u deze slechts eenmaal definieert en dat uw code deze kan gebruiken om veel objecten te maken die gebruikmaken van een groot aantal gegevenstypen. Dit resulteert in betere prestaties dan het definiëren van de klasse met het Object type.

Naast klassen kunt u ook algemene structuren, interfaces, procedures en gemachtigden definiëren en gebruiken.

Een klasse definiëren met een typeparameter

  1. Definieer de klasse op de normale manier.

  2. Voeg (Oftypeparameter) toe direct na de klassenaam om een typeparameter op te geven.

  3. Als u meer dan één typeparameter hebt, maakt u een door komma's gescheiden lijst tussen de haakjes. Herhaal het Of trefwoord niet.

  4. Als uw code bewerkingen uitvoert op een andere typeparameter dan eenvoudige toewijzing, volgt u die typeparameter met een As component om een of meer beperkingen toe te voegen. Een beperking garandeert dat het type dat is opgegeven voor die typeparameter voldoet aan een vereiste zoals:

    • Ondersteunt een bewerking, zoals >, die door uw code wordt uitgevoerd

    • Ondersteunt een lid, zoals een methode, die toegang heeft tot uw code

    • Een parameterloze constructor beschikbaar maken

    Als u geen beperkingen opgeeft, zijn de enige bewerkingen en leden die uw code kan gebruiken, de bewerkingen die door het objectgegevenstype worden ondersteund. Zie Lijst met typen voor meer informatie.

  5. Identificeer elk klasselid dat moet worden gedeclareerd met een opgegeven type en declareer het Astypeparameter. Dit geldt voor interne opslag, procedureparameters en retourwaarden.

  6. Zorg ervoor dat uw code alleen bewerkingen en methoden gebruikt die worden ondersteund door elk gegevenstype dat door deze code kan worden verstrekt itemType.

    In het volgende voorbeeld wordt een klasse gedefinieerd waarmee een zeer eenvoudige lijst wordt beheerd. Deze bevat de lijst in de interne matrix itemsen de met behulp van code kan het gegevenstype van de lijstelementen declareren. Met een geparameteriseerde constructor kan de code de bovengrens van itemsen de constructor zonder parameters instellen op 9 (voor een totaal van 10 items).

    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
    

    U kunt een klasse declareren van simpleList waaruit een lijst Integer met waarden moet worden opgeslagen, een andere klasse voor het opslaan van een lijst met waarden en een andere klasse voor het opslaan Date van String waarden. Met uitzondering van het gegevenstype van de lijstleden gedragen objecten die zijn gemaakt op basis van al deze klassen zich identiek.

    Het typeargument waarmee code wordt geleverd itemType , kan een intrinsiek type zijn, zoals Boolean of Double, een structuur, een opsomming of een willekeurig type klasse, inclusief een klasse die door uw toepassing wordt gedefinieerd.

    U kunt de klasse simpleList testen met de volgende code.

    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
    

Zie ook