Delphi GetClass [英] Delphi GetClass

查看:186
本文介绍了Delphi GetClass的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是如何访问在另一个单位的类?例如:

 程序Project1; 

{$ APPTYPE CONSOLE}

使用
SysUtils,
类,
系统,
StrUtils,
Math,
TypInfo,
'Data.pas'中的数据

var
Str,name,value:string;
List,tmpList:TStringList;
i:Integer;
Obj:TObject;
CRef:TPersistentClass;
d:TData;
begin
d:= TData(GetClass('Data.TData')。Create);
Writeln(Format('%s',[d.Name]));
Readln;
Readln;
end。

而数据单位:

  unit Data; 

接口
使用
SysUtils,
类;
type
TData = class(TObject)
FName:string;
已发布
属性名称:string read FName write FName;
end;
type
TIn = class(TObject)
FName:string;
已发布
属性名称:string read FName write FName;
end;
实现

end。

问题是方法GetClass返回我总是nil。
我知道有这样的问题,但他们不帮助我。



提前感谢!



如果你使用的是后面版本的Delphi版本,你可以使用RTTI单元。 > 使用RTTI; 
..
var
R:TRttiContext;
begin
R.FindType('Data.TData')
...

在你的例子中,TIn不是内部类,但内部类也可以这样访问:

  R .FindType('Data.TData.TIn')


My question is how to access a class which is in an other unit? For an example:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Classes,
  System,
  StrUtils,
  Math,
  TypInfo,
  Data in 'Data.pas';

var
  Str, name, value                      : string;
  List, tmpList                         : TStringList;
  i                                     : Integer;
  Obj                                   : TObject;
  CRef                                  : TPersistentClass;
  d                                     : TData;
begin
  d := TData(GetClass('Data.TData').Create);
  Writeln(Format('%s', [d.Name]));
  Readln;
  Readln;
end.

And the Data unit :

unit Data;

interface
 uses
  SysUtils,
  Classes;
type
  TData = class(TObject)
    FName : string;
  published
    property Name : string read FName write FName;
  end;
type
  TIn = class(TObject)
    FName : string;
  published
    property Name : string read FName write FName;
  end;
implementation

end.

The problem is that the method GetClass return me always nil. I know that there is a questions like this one but they doesn't helped me.

Thanks in advance!

解决方案

If you are using one of the later Delphi versions you can use the RTTI unit.

uses RTTI;
..
  var
    R : TRttiContext;
  begin
    R.FindType('Data.TData')
...

In your example TIn is not a inner class, but inner classes can also be accessed like this:

R.FindType('Data.TData.TIn')

这篇关于Delphi GetClass的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆