在Delphi中,如何使用TDictionary的class of关键字实现泛型功能?

2026-04-10 02:461阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计270个文字,预计阅读时间需要2分钟。

在Delphi中,如何使用TDictionary的class of关键字实现泛型功能?

想法定义非常简单 — 使用带有类名的TDictionary为vm.ClassNameToComponent映射,使用TLuaClassTemplateenum.Value.RegisterClass注册类,而不是直接使用TLuaClassTemplateTButton.RegisterClass。

想法很简单 – 将带有类名的TDictionary用于TComponent

for enum in vm.ClassNameToComponent do TLuaClassTemplate<enum.Value>.RegisterClass(vm.LS, PrintGlobal, container, vm);

用enum而不是

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中获取的类名来处理基于泛型的类.
但是有问题:

TClassNameToComponentDict = TDictionary<string, TComponent>; ... ClassNameToComponent: TClassNameToComponentDict; ... ClassNameToComponent := TClassNameToComponentDict.Create; ClassNameToComponent.Add('TButton', TButton); ClassNameToComponent.Add('TPanel', TPanel); ClassNameToComponent.Add('TEdit', TEdit); ...

错误“不兼容的类型’TComponent’和’类TButton’”.
如何使用TButton等“类”作为通用值?

您使用的类型

TDictionary<string, TComponent>

表示从字符串到类实例的映射.但是你想要一个从字符串到类的映射.所以你需要:

在Delphi中,如何使用TDictionary的class of关键字实现泛型功能?

TDictionary<string, TComponentClass>

哪里

TComponentClass = class of TComponent

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

本文共计270个文字,预计阅读时间需要2分钟。

在Delphi中,如何使用TDictionary的class of关键字实现泛型功能?

想法定义非常简单 — 使用带有类名的TDictionary为vm.ClassNameToComponent映射,使用TLuaClassTemplateenum.Value.RegisterClass注册类,而不是直接使用TLuaClassTemplateTButton.RegisterClass。

想法很简单 – 将带有类名的TDictionary用于TComponent

for enum in vm.ClassNameToComponent do TLuaClassTemplate<enum.Value>.RegisterClass(vm.LS, PrintGlobal, container, vm);

用enum而不是

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中获取的类名来处理基于泛型的类.
但是有问题:

TClassNameToComponentDict = TDictionary<string, TComponent>; ... ClassNameToComponent: TClassNameToComponentDict; ... ClassNameToComponent := TClassNameToComponentDict.Create; ClassNameToComponent.Add('TButton', TButton); ClassNameToComponent.Add('TPanel', TPanel); ClassNameToComponent.Add('TEdit', TEdit); ...

错误“不兼容的类型’TComponent’和’类TButton’”.
如何使用TButton等“类”作为通用值?

您使用的类型

TDictionary<string, TComponent>

表示从字符串到类实例的映射.但是你想要一个从字符串到类的映射.所以你需要:

在Delphi中,如何使用TDictionary的class of关键字实现泛型功能?

TDictionary<string, TComponentClass>

哪里

TComponentClass = class of TComponent

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