Определение структур в программе
Определение структуры начинается с модификатора уровня доступа и ключевого слова Structure:
Public Structure NameOfStructure
' Код структуры End Structure
Для каждого члена структуры должен быть указан модификатор доступа (например, Public или Private). Поля, объявленные с ключевым словом Dim вне процедур и функций, считаются открытыми. Ниже приведен простейший вариант структуры для работы с комплексными числами:
Public Structure ComplexNumber
Private m_real As Double
Private m_complex As Double
Public Property real () As Double Get
Return m_real
End Get Set(ByVal Value As Double)
m_real = Value
End Set
End Property
Public Property complex()As Double Get
Return m_complex End Get Set(ByVal Value As Double)
m_complex = Value
End Set
End Property
Public Sub New(ByVal x As Double. ByVal у As Double)
real = x complex = у
End Sub
Public Function Add(ByVal zl As ComplexNumber) As ComplexNumber
Dim z As ComplexNumber
z.real = Me.real + zl.real
Z.complex = Me.complex + zl.complex
Return z End Function
' И т.д. End Structure
Обратите внимание на возвращение структуры функцией Add. Кстати, поля структур не могут инициализироваться при объявлении:
Private m_real As Double = 0 ' Ошибка
Между структурами и ссылочными объектами существует еще одно принципиальное различие: использование открытых полей вместо свойств Get-Set в структурах широко распространено и не считается проявлением плохого стиля программирования, как для объектов. Это связано с тем, что поля экземпляров обычно относятся к базовым типам. Например, переопределение приведенной выше структуры ComplexNumber с открытыми полями Real и Imaginary не вызовет особых проблем.
Структуры создаются вызовом New или при присваивании значений их полям. Обращения к полям структур осуществляются так же, как и обращения к свойствам объектов. Ниже приведен пример использования структуры Compl exNumber:
Sub Main()
Dim Z1 As New ComplexNumber(2.3. 2.4)
Dim Z2.Z3 As ComplexNumber
Z2.real = 1.3
Z2.complex =1.4
Z3 = Zl.Add(Z2)
Console. WriteLine(Z3. real)
Console.ReadLine()
End Sub
Текущая версия VB . NET не позволяет переопределять смысл операторов (то есть про-изводить перегрузку операторов), поэтому нам пришлось определить метод Add вместо того, чтобы задать новое определение для оператора «+». Возможность перегрузки операторов должна появиться в будущих версиях VB .NET. Если вы хотите, чтобы в сегодняшней версии вашего пакета для работы с комплексными числами сложение выполнялось знаком «+», придется использовать С#.
Структуры могут содержать любые объекты VB .NET, в том числе другие структуры, перечисляемые типы, массивы и т. д. Таким образом, на VB .NET можно написать пакет для работы с матрицами, в котором основная структура данных будет определяться следующим образом:
Public Structure Matrix
Private TheOata(,) As Double
' И т.д. End Structure