Ответ 1
Большая разница заключается в том, что записи являются типами значений, а классы - ссылочными типами. В двух словах это означает, что:
- Для типа значения при использовании назначения
a := b
выполняется копия. Есть два разных экземпляра:a
иb
. - Для ссылочного типа, когда вы используете назначение,
a := b
, обе переменные относятся к одному экземпляру. Существует только один случай.
Главным следствием этого является то, что происходит, когда вы пишете a.Field := 42
. Для записи тип значения, присваивание a.Field
изменяет значение члена в a
, но не в b
. Это потому, что a
и b
- разные экземпляры. Но для класса, поскольку a
и b
оба относятся к одному экземпляру, то после выполнения a.Field := 42
вы можете с уверенностью утверждать, что b.Field = 42
.
Нет жесткого и быстрого правила, в котором говорится, что вы всегда должны использовать типы значений или всегда использовать ссылочные типы. Оба имеют свое место. В некоторых ситуациях предпочтительнее использовать один, и в других ситуациях предпочтительнее использовать другое. По сути, решение всегда сводится к решению о том, что вы хотите, чтобы оператор присваивания имел в виду.
У вас есть существующая база кода и, по-видимому, знакомые с ней программисты, которые сделали особый выбор. Если у вас нет веских оснований переключиться на использование ссылочных типов, внесение изменений почти наверняка приведет к дефектам. И недостатки как в существующем коде (переход к ссылочному типу меняет смысл оператора присваивания), так и в коде, который вы пишете в будущем (вы и ваши коллеги разработали интуицию относительно значения оператора присваивания в конкретных контекстах, и эта интуиция сломается если вы переключаетесь).
Что еще, вы заявляете, что ваши типы не используют методы. Тип, который состоит только из данных и не имеет связанных с ним методов, скорее всего, наилучшим образом представлен типом значения. Я не могу сказать это точно, но мои инстинкты говорят мне, что оригинальные разработчики сделали правильный выбор.