在给定字符串中的标识符的情况下获取持久对象的实例

时间:2009-08-05 07:28:43

标签: delphi runtime

在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 个答案:

答案 0 :(得分:2)

这很常见。 您需要按名称保存对象实例的列表。您已经使用字符串列表建议了这一点。这可用于按名称检索实例。所以: 创建对象时,您可以:

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;

业务收益指数

答案 1 :(得分:1)

您可以创建一个已发布的属性,可以通过运行时类型信息(RTTI)访问该属性。请参见Delphi in a nutshellGetObjectProp的第73页。

Writeln((GetObjectProp(O,'ObjField') As TNamedObject).ObjectName);