Вы можете использовать и классы, и структуры для определения Ваших собственных типов данных для использования в построении блоков Вашей программы.
Однако структуры-объекты всегда передают по значению, а объекты классов всегда передаются по ссылке. Это обозначает, что они предназначены для разных видов зада. Когда Вы определите конструкции данных и функциональность, нужную Вам для проекта, решите для каждой конструкции данных, должна ли она быть определена как класс или как структура.
В качестве главного совета, создание структуры предпочтительнее, когда одно или более из этих условий применимы:
- Основная цель структуры - инкапсулировать несколько связанных простых значений данных.
- Есть все основания ожидать, что инкапсулированные значения будут передавать по значению, а не с помощью ссылочного механизма, когда Вы присваиваете или передаёте объект этой структуры.
- Все свойства, хранимые структурой являются типами-значениями, что ведёт к тому, что они будут копироваться, а не ссылаться.
- Структуре не нужно наследовать свойства или поведение из другого существующего типа.
Примеры хороших кандидатов на роль структуры:
- Размер геометрической фигуры, возможно инкапсулирущей свойства @code(width) и @code(height), оба типа @code(Double).
- Способ сослаться на диапазон значений, возможно инкапсулирующий свойства @code(start) и @code(end), оба типа @code(Int).
- Точка в трёхмерной системе координат, возможно инкапсулирующая свойства x, y и z, все типа @code(Double).
Во всех остальных свойствах определите класс и создавайте объекты этого класса, управляемые и передаваемые по ссылке. На практике это означает, что многие произвольные конструкции данных должны быть классами, а не структурами.