Sdílet prostřednictvím


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

  1. Definujte třídu běžným způsobem.

  2. Přidejte (Of typeparameter) bezprostředně za název třídy a zadejte parametr typu.

  3. Pokud máte více než jeden parametr typu, vytvořte v závorkách čárkami oddělený seznam. Neopakujte Of klíčové slovo.

  4. 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ů.

  5. 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.

  6. 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í mez itemsa 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 seznam Integer hodnot, jinou třídu, která bude obsahovat seznam String 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, jako Boolean Doubleje 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
    

Viz také