Структуры и другие элементы программирования (Visual Basic)

Структуры можно использовать в сочетании с массивами, объектами и процедурами, а также друг с другом. Взаимодействия используют тот же синтаксис, что и эти элементы, используются по отдельности.

Примечание.

Невозможно инициализировать элементы структуры в объявлении структуры. Значения можно назначать только элементам переменной, объявленной как тип структуры.

Структуры и массивы

Структура может содержать массив как один или несколько его элементов. Это показано в следующем примере.

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

Доступ к значениям массива в структуре так же, как и к свойству объекта. Это показано в следующем примере.

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

Можно также объявить массив структур. Это показано в следующем примере.

Dim allSystems(100) As systemInfo  

Для доступа к компонентам этой архитектуры данных следуйте тем же правилам. Это показано в следующем примере.

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

Структуры и объекты

Структура может содержать объект как один или несколько его элементов. Это показано в следующем примере.

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

В таком объявлении следует использовать определенный класс объектов, а не Object.

Структуры и процедуры

Структуру можно передать в качестве аргумента процедуры. Это показано в следующем примере.

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  

Предыдущий пример передает структуру по ссылке, которая позволяет процедуре изменять его элементы таким образом, чтобы изменения вступили в силу в вызывающем коде. Если вы хотите защитить структуру от такого изменения, передайте ее по значению.

Вы также можете вернуть структуру из Function процедуры. Это показано в следующем примере.

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  

Структуры в структурах

Структуры могут содержать другие структуры. Это показано в следующем примере.

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"  

Этот метод также можно использовать для инкапсулирования структуры, определенной в одном модуле в структуре, определенной в другом модуле.

Структуры могут содержать другие структуры произвольной глубины.

См. также