Я хотел бы сделать запись как свойство объекта. Проблема в том, что когда я меняю одно из полей этой записи, объект не знает об этом изменении.Может ли запись использоваться как свойство объекта?
type
TMyRecord = record
SomeField: Integer;
end;
TMyObject = class(TObject)
private
FSomeRecord: TMyRecord;
procedure SetSomeRecord(const Value: TMyRecord);
public
property SomeRecord: TMyRecord read FSomeRecord write SetSomeRecord;
end;
И потом, если я ...
MyObject.SomeRecord.SomeField:= 5;
... не будет работать.
Как я могу сделать процедуру настройки свойств «уловкой», когда записывается одно из полей записи? Возможно, какой-то трюк в том, как объявить запись?
Подробнее
Моя цель состоит в том, чтобы избежать необходимости создания TObject
или TPersistent
с OnChange
события (например, TFont
или TStringList
). Я более чем знаком с использованием объектов для этого, но в попытке cleanup мой код немного, я вижу, могу ли я использовать запись вместо этого. Мне просто нужно убедиться, что мой установщик свойств записи можно вызвать правильно, когда я установил одно из полей записи.
Возможно ли, что «упакованная запись» подходит? –
'упакован' или иначе находится рядом с точкой. Это просто контролирует компоновку и выравнивание записи. Основная проблема заключается в различии между типами значений и ссылочными типами. На самом деле код в вашем вопросе даже не компилируется. –
@DavidHeffernan Очень верно, я на самом деле не поместил этот код в Delphi, набрал его прямо здесь. –