Я хотел бы использовать атрибуты для чтения/записи значений свойств в/из реестра.Могу ли я получить доступ к атрибутам для свойства в методах чтения и записи
Все рассмотренные мной примеры используют функцию Load/Save, чтобы перебрать все свойства и изучить атрибуты. Вместо того, чтобы иметь процедуру загрузки/сохранения, я хотел бы прочитать значение из реестра, когда свойство читается или записывается. Однако я не могу понять, как узнать имя текущего свойства в методе чтения.
Я знаю, что у меня может быть однострочный приемник/сеттер для моих свойств, которые передают правильные строковые значения методам чтения/записи. Я надеялся, что смогу использовать атрибуты. Затем, когда я определяю простые классы со свойствами, которые я хочу сохранить и восстановить. Мне не нужно было писать код для этих классов. Все будет рассмотрено в базовом классе.
Возможно, это невозможно.
Я беру этот пример из Роберт Любовь, как моя отправная точка: http://robstechcorner.blogspot.de/2009/10/ini-persistence-rtti-way.html
type
RegValueAttribute = class(TCustomAttribute)
private
FName: string;
FDefaultValue: string;
published
constructor Create(const aName : string;const aDefaultValue : String = '');
property Name : string read FName write FName;
property DefaultValue : string read FDefaultValue write FDefaultValue;
end;
TRegBaseClass = class
protected
procedure WriteString(AValue: string);
function ReadString: string;
end;
TMyRegClass = class(TRegBaseClass)
public
[RegValueAttribute('MySavedProperty', 'DefaultValue')]
property MySavedProperty: string read ReadString write WriteString;
end;
///////////////////////////////////////////
function TRegBaseClass.ReadString: string;
begin
// ?? Is there any way to get the attributes for the property
// that got me here.
end;
procedure TRegBaseClass.ReadString(AValue: string);
begin
// ?? Is there any way to get the attributes for the property
// that got me here.
end;
Несколько свойств могут использовать один и тот же геттер/сеттер и индексная комбинация. –
Или могут быть несколько индексированных свойств, которые используют разные геттер/сеттер, и поэтому только индекс не идентифицирует свойство. –
* Множественные свойства могут использовать один и тот же приемник/сеттер и индексную комбинацию * - Очевидно, что в его программе можно делать какие-либо ошибки и стрелять в его ноги. Но это дает ему метод, который он может использовать (или злоупотреблять, но любой метод может быть использован неправильно) @DavidHeffernan –