首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TDictionary中使用"class of“?

在TDictionary中使用"class of“?
EN

Stack Overflow用户
提问于 2013-03-24 23:32:31
回答 1查看 168关注 0票数 4

想法很简单-将带有类名的TDictionary转换为TComponent以供使用

代码语言:javascript
复制
for enum in vm.ClassNameToComponent do
 TLuaClassTemplate<enum.Value>.RegisterClass(vm.LS, PrintGlobal, container, vm);

使用枚举代替

代码语言:javascript
复制
TLuaClassTemplate<TButton>.RegisterClass(vm.LS, PrintGlobal, container, vm);
TLuaClassTemplate<TPanel>.RegisterClass(vm.LS, PrintGlobal, container, vm);
TLuaClassTemplate<TEdit>.RegisterClass(vm.LS, PrintGlobal, container, vm);
...

并使用取自xml的类名来处理基于泛型的类。

但是有一个问题:

代码语言:javascript
复制
TClassNameToComponentDict = TDictionary<string, TComponent>;
...
ClassNameToComponent: TClassNameToComponentDict;
...
  ClassNameToComponent := TClassNameToComponentDict.Create;
  ClassNameToComponent.Add('TButton', TButton);
  ClassNameToComponent.Add('TPanel', TPanel);
  ClassNameToComponent.Add('TEdit', TEdit);
...

错误“类型'TComponent‘和’TButton的类‘不兼容”。

如何使用"class of“,如TButton等作为泛型值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-24 23:34:09

您所使用的类型

代码语言:javascript
复制
TDictionary<string, TComponent>

表示从字符串到类的实例的映射。但是您需要一个从字符串到的映射。因此,您需要:

代码语言:javascript
复制
TDictionary<string, TComponentClass>

哪里

代码语言:javascript
复制
TComponentClass = class of TComponent

请注意,您不需要声明TComponentClass,因为它已经在Classes单元中声明了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15600373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档