gpt4 book ai didi

delphi - 在 Delphi 属性构造函数中使用特定类类型引用

转载 作者:行者123 更新时间:2023-12-03 15:02:08 24 4
gpt4 key购买 nike

由于 Delphi 无法处理枚举值上的属性,我尝试了另一种方法。 TMyEnum 是我的枚举。 TMyEnumLabelProvider 类提供了我需要的标签。我将枚举类型与属性链接到其标签提供程序。然而这不能编译。我无法在引用其类类型之前完全定义提供程序,因为它在其方法之一中使用 TMyEnum。

TEnumLabelProviderCallback = procedure(Context: TObject; 
Index: integer;
const Name: string) of object;

TEnumLabelProvider = class abstract
public
procedure Iterate(Context: TObject;
Callback: TEnumLabelProviderCallback); virtual; abstract;
end;

TEnumLabelProviderClass = class of TEnumLabelProvider;

TEnumLabelProviderAttribute = class(TCustomAttribute)
private
FProviderClass: TEnumLabelProviderClass;
public
constructor Create(ProviderClass: TEnumLabelProviderClass);
property ProviderClass: TEnumLabelProviderClass read FProviderClass;
end;

TMyEnumLabelProvider = class;

{$SCOPEDENUMS ON}

[TEnumLabelProvider(TMyEnumLabelProvider)]
TMyEnum = (MyEnum0,
MyEnum1,
MyEnum2);
{$SCOPEDENUMS OFF}

// This is where the compilation fails.....
TMyEnumLabelProvider = class(TEnumLabelProvider)
public
class function GetLabel(MyEnum: TMyEnum): string;
procedure Iterate(Context: TObject; Callback: TEnumLabelProviderCallback); override;
end;

关于如何正确执行此操作的任何想法。现在我通过声明 GetLabel(MyEnum: integer) 来解决问题,但显然我更喜欢类型严格。

提前致谢。

最佳答案

最简单的解决方案是使用静态字符串数组来存储标签,如下定义。然后,您可以简单地使用枚举索引数组来获取所需的标签。

type
TMyEnum = (MyEnum0, MyEnum1, MyEnum2);

const
EnumLabels : array[TMyEnum] of string = ('MyEnumLabel0', 'MyEnumLabel1', 'MyEnumLabel2');

关于delphi - 在 Delphi 属性构造函数中使用特定类类型引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9973329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com