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
Definieer de klasse op de normale manier.
Voeg
(Of
typeparameter)
toe direct na de klassenaam om een typeparameter op te geven.Als u meer dan één typeparameter hebt, maakt u een door komma's gescheiden lijst tussen de haakjes. Herhaal het
Of
trefwoord niet.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 uitgevoerdOndersteunt 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.
Identificeer elk klasselid dat moet worden gedeclareerd met een opgegeven type en declareer het
As
typeparameter
. Dit geldt voor interne opslag, procedureparameters en retourwaarden.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
items
en de met behulp van code kan het gegevenstype van de lijstelementen declareren. Met een geparameteriseerde constructor kan de code de bovengrens vanitems
en 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 lijstInteger
met waarden moet worden opgeslagen, een andere klasse voor het opslaan van een lijst met waarden en een andere klasse voor het opslaanDate
vanString
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, zoalsBoolean
ofDouble
, 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