Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
(Oftypeparameter)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
Ofklíč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
Asklauzulí 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
Astypeparameter. 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ý
itemTypemůže poskytnout .Následující příklad definuje třídu, která spravuje velmi jednoduchý seznam. Obsahuje seznam v interním poli
itemsa kód using může deklarovat datový typ prvků seznamu. Parametrizovaný konstruktor umožňuje použití kódu nastavit horní mezitemsa 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 ClassMůžete deklarovat třídu, ze
simpleListkteré se má uchovávat seznamIntegerhodnot, jinou třídu, která bude obsahovat seznamStringhodnot a další pro uloženíDatehodnot. S výjimkou datového typu členů seznamu se objekty vytvořené ze všech těchto tříd chovají stejně.Argument typu, který
itemTypepomocí kódu poskytuje, může být vnitřní typ, jakoBooleanDoubleje nebo , struktura, výčet nebo jakýkoli typ třídy, včetně typu, který vaše aplikace definuje.Třídu
simpleListmůž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