Даже если бы я услышал, что по оригинальному определению Паскаля Никлауса Вирта все должно работать так, как вы ожидали, я не видел такого поведения в Delphi, начиная с его предка Turbo Pascal 2.0 . Быстрый просмотр FreePascal показал, что его поведение такое же. Как сказано в документации Delphi :
Вы можете читать или писать в любое поле любого варианта в любое время; но если вы пишете в поле в одном варианте, а затем в поле в другом варианте, возможно, вы перезаписываете свои собственные данные. Тег, если он есть, функционирует как дополнительное поле (типа ordinalType) в не вариантной части записи. "
Что касается ваших намерений, насколько я понял, я бы использовал два разных класса, вроде
a = class
b : Integer
end;
aEnabled = class(a)
c: Integer
end;
aDisabled = class(a)
d: String //plus this way you can use long strings
end;
Таким образом, вы можете получить некоторую поддержку от редактора кода IDE даже во время разработки. Более полезным, однако, будет то, что намного будет проще модифицировать и поддерживать позже.
Однако, если вам нужно быстрое переключение значений переменных записи во время выполнения, @ вариант Дэвида Хеффернана , чтобы использовать свойства и иметь проверки во время выполнения, более разумно.