在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;
提前感谢您,对于我无法用英语清楚地表达我的问题,请向我道歉。
答案 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 nutshell和GetObjectProp的第73页。
Writeln((GetObjectProp(O,'ObjField') As TNamedObject).ObjectName);