Структуры. Определение структур в программе.
Некоторые полагают, что структуры VB.NET аналогичны пользовательским типам прежних версий VB или многих других языков программирования. Конечно, структуры VB.NET могут использоваться как пользовательские типы, но этим область их возможного применения не исчерпана. Структура может обладать всеми признаками традиционного класса, включая конструкторы и члены с атрибутами Private/Friend/Public. Единственное отличие структур от обычных объектов заключается в том, что структуры обладают структурной семантикой. Вспомните, какой смысл вкладывается в этот термин:
- передача по значению не изменяет состояния исходной переменной;
- структуры создаются без использования оператора New, поэтому для них всегда определено значение по умолчанию, образованное значениями по умолчанию всех полей экземпляра;
- в структуре определен метод Equals, который возвращает True, если две структуры содержат одинаковые внутренние данные (метод Equals используется в форме А.Еquals(В)).
Примечание
В текущей версии VB.NET равенство двух экземпляров структурного типа не может быть проверено при помощи знака равенства (=). Вместо этого следует использовать метод Equals. По умолчанию метод Equals выполняет так называемое поверхностное (shallow) сравнение – смысл этого термина рассматривается в разделе "Клонирование объектов" главы 5. Если вы хотите, чтобы ваша версия Equals отличалась каким-то особым поведением, метод можно переопределить в определении структуры.
Некоторые программисты используют структуры чаще, чем следует, полагая, что структура как облегченный объект работает эффективнее, чем объекты обычных классов. К сожалению, этот подход не лишен недостатков: два объекта, обладающие одинаковым состоянием, далеко не всегда должны считаться равными, тогда как при использовании структур это неизбежно. Кроме того, пользователи вашего кода обычно ожидают, что структуры (и структурные типы вообще) по своему поведению близки к встроенным структурным типам вроде Integer и Double.
Примечание
Все стандартные числовые типы (Integer, Long, и т.д.) реализованы B .NET Framewdrke виде структур.
Определение структур в программе
Определение структуры начинается с модификатора уровня доступа и ключевого слова 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