Compartilhar via


Estruturas e outros elementos de programação (Visual Basic)

Você pode usar estruturas em conjunto com matrizes, objetos e procedimentos, bem como entre si. As interações usam a mesma sintaxe que esses elementos usam individualmente.

Observação

Não é possível inicializar nenhum dos elementos de estrutura na declaração de estrutura. Você pode atribuir valores somente a elementos de uma variável que foi declarada como de um tipo de estrutura.

Estruturas e matrizes

Uma estrutura pode conter uma matriz como um ou mais de seus elementos. O exemplo a seguir ilustra essa situação.

Public Structure systemInfo  
    Public cPU As String  
    Public memory As Long  
    Public diskDrives() As String  
    Public purchaseDate As Date  
End Structure

Você acessa os valores de uma matriz dentro de uma estrutura da mesma forma que acessa uma propriedade em um objeto. O exemplo a seguir ilustra essa situação.

Dim mySystem As systemInfo  
ReDim mySystem.diskDrives(3)  
mySystem.diskDrives(0) = "1.44 MB"  

Você também pode declarar uma matriz de estruturas. O exemplo a seguir ilustra essa situação.

Dim allSystems(100) As systemInfo  

Você segue as mesmas regras para acessar os componentes dessa arquitetura de dados. O exemplo a seguir ilustra essa situação.

ReDim allSystems(5).diskDrives(3)  
allSystems(5).CPU = "386SX"  
allSystems(5).diskDrives(2) = "100M SCSI"  

Estruturas e objetos

Uma estrutura pode conter um objeto como um ou mais de seus elementos. O exemplo a seguir ilustra essa situação.

Protected Structure userInput  
    Public userName As String  
    Public inputForm As System.Windows.Forms.Form  
    Public userFileNumber As Integer  
End Structure  

Você deve usar uma classe de objeto específica em tal declaração, em vez de Object.

Estruturas e procedimentos

Você pode passar uma estrutura como um argumento de procedimento. O exemplo a seguir ilustra essa situação.

Public currentCPUName As String = "700MHz Pentium compatible"  
Public currentMemorySize As Long = 256  
Public Sub fillSystem(ByRef someSystem As systemInfo)  
    someSystem.cPU = currentCPUName  
    someSystem.memory = currentMemorySize  
    someSystem.purchaseDate = Now  
End Sub  

O exemplo anterior passa a estrutura por referência, o que permite que o procedimento modifique seus elementos para que as alterações entrem em vigor no código de chamada. Se você quiser proteger uma estrutura contra essa modificação, passe-a por valor.

Você também pode retornar uma estrutura de um Function procedimento. O exemplo a seguir ilustra essa situação.

Dim allSystems(100) As systemInfo  
Function findByDate(ByVal searchDate As Date) As systemInfo  
    Dim i As Integer  
    For i = 1 To 100  
        If allSystems(i).purchaseDate = searchDate Then Return allSystems(i)  
    Next i  
   ' Process error: system with desired purchase date not found.  
End Function  

Estruturas dentro de estruturas

Estruturas podem conter outras estruturas. O exemplo a seguir ilustra essa situação.

Public Structure driveInfo  
    Public type As String  
    Public size As Long  
End Structure  
Public Structure systemInfo  
    Public cPU As String  
    Public memory As Long  
    Public diskDrives() As driveInfo  
    Public purchaseDate As Date  
End Structure  
Dim allSystems(100) As systemInfo  
ReDim allSystems(1).diskDrives(3)  
allSystems(1).diskDrives(0).type = "Floppy"  

Você também pode usar essa técnica para encapsular uma estrutura definida em um módulo dentro de uma estrutura definida em um módulo diferente.

Estruturas podem conter outras estruturas a uma profundidade arbitrária.

Confira também