Получить экземпляр персистентного объекта, учитывая идентификатор в строке - PullRequest
1 голос
/ 05 августа 2009

Как в Delphi 7 получить экземпляр постоянного объекта, учитывая идентификатор объекта в строке?

function TForm1.GetObject(Identifier: string): TPersistent;
begin
  //what to do here?
end;

Пример использования:

//If I have these declared...
public
  MyString: string;
  MyStringList: TStringList;

//the function will be used something like this
MyString:=TStringList(GetObject('MyStringList')).Text;

Заранее благодарю и, пожалуйста, извиняюсь за то, что не смог четко выразить свой вопрос на английском языке.

Ответы [ 2 ]

2 голосов
/ 05 августа 2009

Это очень распространено. Вам нужно держать список экземпляров объекта по имени. Вы уже предложили это со своим списком строк. Это может быть использовано для извлечения экземпляра по имени. Так: Когда вы создаете свой объект, вы делаете:

MyObjList := TStringList.Create;

MyObj := TMyObj.Create;
MyObjList.AddObject( 'Thing', MyObj );

MyObj2 := TMyObj.Create;
MyObjList.AddObject( 'Thing2', MyObj2 );

и т.д.

Теперь для извлечения вы просто выполните:

function GetObject( const AName : string ) : TMyObj;
begin
  I := MyObjList.IndexOf( AName );
  If I = -1 then
    Raise Exception.Create( 'Cant find it' );
  Result := MyObjList[I] as TMyObj;
end;

Bri

1 голос
/ 05 августа 2009

Вы можете создать опубликованное свойство, к которому можно получить доступ через информацию о типе среды выполнения (RTTI). См. Стр. 73 из Delphi в двух словах и GetObjectProp .

Writeln((GetObjectProp(O,'ObjField') As TNamedObject).ObjectName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...