Partilhar via


Como definir uma classe capaz de fornecer uma funcionalidade idêntica em tipos de dados diferentes (Visual Basic)

Você pode definir uma classe a partir da qual você pode criar objetos que fornecem funcionalidade idêntica em tipos diferentes de dados. Para fazer isso, você especificar um ou mais parâmetros de tipo na definição. A classe, em seguida, pode servir como um modelo de objetos que usam vários tipos de dados. Uma classe definida dessa maneira é chamada de classe genérica.

A vantagem de definir uma classe genérica é que você a define apenas uma vez, e seu código pode usá-la para criar vários objetos que usam uma grande variedade de tipos de dados. Isso resulta em um desempenho melhor do que a definição de classe com o tipo Object.

Além disso, para classes, você pode também definir e usar estruturas genéricas, interfaces, procedimentos e representantes.

Para definir uma classe com um parâmetro de tipo

  1. Defina a classe da forma normal.

  2. Adicione (Of typeparameter) imediatamente após o nome da classe para especificar um parâmetro de tipo.

  3. Se você tiver mais de um parâmetro do tipo, faça uma lista separada por vírgulas dentro dos parênteses. Não repita a palavra-chave Of.

  4. Se o seu código executa operações em um parâmetro de tipo diferente de atribuição simples, siga esse parâmetro do tipo com uma cláusula As para adicionar um ou mais restrições . Uma restrição garante que o tipo fornecido para esse parâmetro do tipo satisfaça um requisito, como a seguinte:

    • Suporta uma operação, como >, que executa o código

    • Oferece suporte ao membro, como um método, que seu código acessa

    • Expõe um construtor sem parâmetros

    Se você não especificar quaisquer restrições, operações e membros que seu código poderá usar serão somente aquelas oferecidas por Tipo de dados Object. Para obter mais informações, consulte Lista de tipos (Visual Basic).

  5. Identifique cada membro da classe que será declarado com um tipo fornecido e declare como As typeparameter. Isso se aplica a armazenamento interno, parâmetros de procedimento e valores de retorno.

  6. Não deixe que o código use somente operações e métodos que são suportados por qualquer tipo de dados pode ele fornecer a itemType.

    O exemplo a seguir define uma classe que gerencia uma lista muito simples. Ele contém a lista da matriz interna items e o uso de código pode declarar o tipo de dados dos elementos de lista. Permite que um construtor com parâmetros use código para definir o limite superior do items, e o construtor padrão define esta como 9 (para um total de 10 itens).

    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
    

    Você pode declarar uma classe a partir de simpleList para armazenar uma lista de valores Integer, outra classe para conter uma lista de valores String e outra para conter valores Date. Exceto para os tipo de dados dos membros da lista, os objetos criados a partir de todas essas classes se comportam de forma idêntica.

    O argumento do tipo que o código usado fornece para itemType pode ser um tipo intrínseco como Boolean ou Double, uma estrutura, uma enumeração ou qualquer tipo de classe, inclusive uma que seu aplicativo define.

    Você pode testar a classe simpleList com o seguinte código:

    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
    

Consulte também

Tarefas

Como usar uma classe genérica (Visual Basic)

Referência

Cláusula Of (Visual Basic)

Lista de tipos (Visual Basic)

Tipo de dados Object

Conceitos

Tipos de dados no Visual Basic

Tipos genéricos no Visual Basic (Visual Basic)

Independência da linguagem e componentes independentes da linguagem