Postupy: Definice třídy, která poskytne identické funkce pro různé datové typy (Visual Basic).
Můžete definovat třídu, ze které můžete vytvářet objekty, které poskytují identické funkce pro různé datové typy. Uděláte to tak, že v definici zadáte jeden nebo více parametrů typu. Třída pak může sloužit jako šablona pro objekty, které používají různé datové typy. Třída definovaná tímto způsobem se nazývá obecná třída.
Výhodou definování obecné třídy je, že ji definujete jen jednou a váš kód ho může použít k vytvoření mnoha objektů, které používají širokou škálu datových typů. Výsledkem je lepší výkon než definování třídy s typem Object
.
Kromě tříd můžete také definovat a používat obecné struktury, rozhraní, procedury a delegáty.
Definování třídy s parametrem typu
Definujte třídu běžným způsobem.
Přidejte
(Of
typeparameter)
bezprostředně za název třídy a zadejte parametr typu.Pokud máte více než jeden parametr typu, vytvořte v závorkách čárkami oddělený seznam. Neopakujte
Of
klíčové slovo.Pokud váš kód provádí operace s jiným parametrem typu než jednoduchým přiřazením, použijte tento parametr typu s
As
klauzulí a přidejte jedno nebo více omezení. Omezení zaručuje, že typ zadaný pro tento parametr typu splňuje požadavek, například následující:Podporuje operaci, například
>
, kterou váš kód provádí.Podporuje člena, například metodu, ke které váš kód přistupuje.
Zpřístupňuje konstruktor bez parametrů.
Pokud nezadáte žádná omezení, jedinými operacemi a členy, které váš kód může použít, jsou ty, které datový typ objektu podporuje. Další informace naleznete v tématu Seznam typů.
Identifikujte každý člen třídy, který má být deklarován se zadaným typem, a deklarujte jej
As
typeparameter
. To platí pro interní úložiště, parametry procedury a návratové hodnoty.Ujistěte se, že váš kód používá pouze operace a metody, které jsou podporovány libovolným datovým typem, který
itemType
může poskytnout .Následující příklad definuje třídu, která spravuje velmi jednoduchý seznam. Obsahuje seznam v interním poli
items
a kód using může deklarovat datový typ prvků seznamu. Parametrizovaný konstruktor umožňuje použití kódu nastavit horní mezitems
a konstruktor bez parametrů nastaví tuto hodnotu na 9 (pro celkem 10 položek).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
Můžete deklarovat třídu, ze
simpleList
které se má uchovávat seznamInteger
hodnot, jinou třídu, která bude obsahovat seznamString
hodnot a další pro uloženíDate
hodnot. S výjimkou datového typu členů seznamu se objekty vytvořené ze všech těchto tříd chovají stejně.Argument typu, který
itemType
pomocí kódu poskytuje, může být vnitřní typ, jakoBoolean
Double
je nebo , struktura, výčet nebo jakýkoli typ třídy, včetně typu, který vaše aplikace definuje.Třídu
simpleList
můžete otestovat pomocí následujícího kódu.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