我想要做的是拥有一个不同类类型的字典,所有类类型都实现一个接口或具有共享的父类。使用此列表,我想从标识我想要的字符串中实例化正确的列表。
因此,如果列表是类“b”、“c”和“d”,它们都继承自“a”或都实现接口“a”,我想将这些类型加载到具有类名的列表中作为标识符,然后创建与列表中的字符串匹配的类。
在 b、c 和 d 类中,我将其添加到字典中作为初始化部分的一部分。
我希望这是有道理的。这样做的最终目标是实现数据库驱动的定制。
我首先尝试使用所有类都实现并具有字典的接口
我试图让我的所有类都继承一个基类,其中包含我将使用的一些抽象函数/过程。我制作了字典
如果所有的类都有一个共同的基类,你可以将它们的元类类型存储在字典中,然后在需要时构造它们,例如:
type
TBaseClass = class
public
constructor Create; virtual;
end;
TClassOfBase = class of TBaseClass;
...
var
Dict: TDictionary<string, TClassOfBase>;
type
TClassB = class(TBaseClass)
end;
Dict.Add('b', TClassB);
var obj: TBaseClass;
obj := Dict['desiredType'].Create;
...
obj.Free;
如果所有的类都有一个共同的接口,你可以将工厂函数存储在字典中,然后在需要时调用它们,例如:
type
IMyInterface = interface
...
end;
...
var
Dict: TDictionary<string, TFunc<IMyInterface>;
type
TClassB = class(TInterfaceObject, IMyInterface)
end;
Dict.Add('b',
function: IMyInterface;
begin
Result := TClassB.Create;
end
);
var intf: IMyInterface;
intf := Dict['desiredType']();
...