Delphi 如何将stringname设置为泛型的类<;T>;

Delphi 如何将stringname设置为泛型的类<;T>;,delphi,generics,Delphi,Generics,我想更改stringname的名称。但我不知道这是否可行 我有: function TServerMethods1.GetCustomer(aId: string): TJsonValue; begin Result:= ToJson(TRepositoryDatabase<TCustomer>.CreateRepository(Factories.FireBirdConnection.TFireBirdConnectionFactory.CreateConnecion(cCo

我想更改stringname的名称。但我不知道这是否可行

我有:

function TServerMethods1.GetCustomer(aId: string): TJsonValue;
begin
  Result:=  ToJson(TRepositoryDatabase<TCustomer>.CreateRepository(Factories.FireBirdConnection.TFireBirdConnectionFactory.CreateConnecion(cConnectionString)).GetItem(aId));
end;
函数TServerMethods1.GetCustomer(aId:string):TJsonValue;
开始
结果:=ToJson(TRepositoryDatabase.CreateRepository(Factories.FireBirdConnection.TFireBirdConnectionFactory.createconnection(cConnectionString)).GetItem(aId));
结束;
这个很好用。 但是现在我想将TCustomer设置为param

function TServerMethods1.GetItem(aClassName, aId: string): TJsonValue;
var
  oClass: TClass;
  LCtx: TRttiContext;
  LTp: TRttiType;
begin
  try
    LTp := LCtx.FindType(AClassName);
  except
    Exit;
  end;

  if (LTp <> nil) and (LTp is TRttiInstanceType) then
    oClass := TRttiInstanceType(LTp).MetaclassType ;


  If assigned(oClass)
  then begin
    Result:=  ToJson(TRepositoryDatabase<oClass>.CreateRepository(Factories.FireBirdConnection.TFireBirdConnectionFactory.CreateConnecion(cConnectionString)).GetItem(aId));
  end;
end;
函数TServerMethods1.GetItem(aClassName,aId:string):TJsonValue; 变量 类:TClass; 立法会十题:; LTp:trtti型; 开始 尝试 LTp:=LCtx.FindType(AClassName); 除了 出口 结束; 如果(LTp nil)和(LTp为TrtInstanceType),则 oClass:=TRttiInstanceType(LTp).MetaclassType; 如果已分配(oClass) 然后开始 结果:=ToJson(TRepositoryDatabase.CreateRepository(Factories.FireBirdConnection.TFireBirdConnectionFactory.createconnection(cConnectionString)).GetItem(aId)); 结束; 结束; 当我用oClass更改TCustomer时,我无法编译。 我得到[dcc32 Error]ServerMethodsUnit1.pas(115):E2003未声明的标识符:“TRepositoryDatabase”

 TRepositoryDatabase <T: Class> = class(TRepositoryBase <T>, IRepository<T>)
  private
    FManager: TObjectManager;
  public
    constructor Create(aConnection: IDBConnection);
    destructor Destroy; override;

    procedure SaveItem(aItem: T); override;
    function GetItem(Id: Variant): T; override;
    function GetItems: TList <T>; override;
    procedure DeleteItem(aItem: T); override;

    class function CreateRepository (aConnection: IDBConnection): IRepository <T>;

  end;
TRepositoryDatabase=class(TRepositoryBase,IRepository)
私有的
F经理:项目经理;
公众的
构造函数创建(A连接:IDBConnection);
毁灭者毁灭;推翻
程序保存项(aItem:T);推翻
函数GetItem(Id:Variant):T;推翻
函数GetItems:TList;推翻
程序删除项(aItem:T);推翻
类函数CreateRepository(A连接:IDBConnection):IRepository;
结束;

是否可以从stringname创建一个类并在generecs中设置它?

除非您在编译时引用泛型类型,否则编译器不会实例化该类型。如果您想要运行时解析,那么编译时泛型是错误的工具。