Структуры подобны классам в том смысле, что они представляют структуры данных и методы для работы с ними. Однако в отличие от классов структуры являются размерными типами и не требуют выделения памяти. Переменная типа «структура» непосредственно содержит данные структуры, в то время как переменная типа «класс» содержит ссылку на данные, называемые объектом. В структуре могут быть определены такие же члены, которые могут быть определены в классе, с учётом определённых различий.
Различия между структурами и классами
Структуры уместно использовать для небольших наборов данных с семантикой размерных типов. Комплексные числа, точки в координатной системе, пары «ключ-значение» в словарях - все это хорошие примеры структур. Основным является то, что они не содержат значительного объема данных, не требуют наследуемости и ссылочной идентичности.
При присваивании значения переменной, тип которой является структурой, создаётся копия присваиваемого значения. Подобно присваиванию, когда структура используется как параметр, передаваемый по значений, или как значение, возвращаемое функцией, происходит создание копии структуры. Структура может быть передана по ссылке с использованием параметров, передаваемых по ссылке, либо выходных параметров.
Определение структуры состоит из опционального множества атрибутов структуры, за которыми могут следовать опциональные модификаторы доступа Public или Friend с последующим ключевым словом Struct и именем структуры. Далее через двоеточие могут быть указаны родительские интерфейсы, которые должна реализовать структура. После этого следует тело структуры, завершаемое последовательностью ключевых слов End Struct.
Struct UserStructure
Public Title: string;
Public Param1: integer;
Public Param2: double;
Public Constructor Create(STitle: string; Param1Value: integer; Param2Value: double);
Begin
Title := STitle;
Param1 := Param1Value;
Param2 := Param2Value;
End Constructor;
End Struct;
Sub Test();
Var
StructObj, StructObj1: UserStructure;
Begin
StructObj := New UserStructure("Пользовательская структура", 100, 3.14);
StructObj1 := StructObj;
StructObj1.Title := "Копия структуры с измененными значениями параметров";
StructObj1.Param1 := 200;
StructObj1.Param2 := 2.7;
End Sub;
Пример реализации интерфейсов в структурах приведён в подразделе «Интерфейсы».
См. также: