gpt4 book ai didi

delphi - 带数组参数的属性构造函数

转载 作者:行者123 更新时间:2023-12-03 15:49:57 26 4
gpt4 key购买 nike

今天我在这里重写了一些旧的东西,却陷入了一个我不知道答案的问题。

我创建了以下属性:

Enumeration<T> = class(TCustomAttribute)
strict private
{ Private declarations }
FValues : TList<T>;
public
{ Public declarations }
constructor Create(const AValues : array of T);
destructor Destroy(); override;
public
{ Public declarations }
property Values : TList<T> read FValues;
end;

考虑到这一点,我可以在以下类中很好地使用此属性:

[Entity('tablename')]
TUser = class(TEntity)
strict private
[Column('idcolumnname')]
[PrimaryKey(True)]
Fid : TInteger;

[Column('typecolumnname')]
[Enumeration<string>(['A', 'B', 'C', 'D', '...'])]
Ftype: TEnumeration<string>;
end;

它能工作真是太好了,但我不知道,在我看来,这不应该工作,因为我无知,delphi属性只期望常量类型,而我不仅使用数组作为参数,而且使用通用参数。

接下来,我创建了这个属性:

Association = class(TCustomAttribute)
strict private
{ Private declarations }
FMasterKeys : TList<string>;
FDetailKeys : TList<string>;
public
{ Public declarations }
constructor Create(const AMasterKeys, ADetailKeys : array of string);
destructor Destroy(); override;
public
{ Public declarations }
property MasterKeys : TList<string> read FMasterKeys;
property DetailKeys : TList<string> read FDetailKeys;
end;

并尝试在此类上使用:

[Entity('tablename')]
TSuperUser = class(TEntity)
strict private
[Association(['masterkey'], ['detailkey'])]
Fuser : TAssociation<TUser>;
end;

我收到错误 [DCC 错误] E2026 需要常量表达式。

好吧,所以在简历中我只是不知道发生了什么,为什么我可以使用 T 数组作为属性参数,而不是字符串数组。

感谢您提前提供的任何帮助

最佳答案

检查编译器警告。您的“编译代码”应该显示 W1025 Unsupported language feature: 'custom attribute'。所以你认为编译的实际上没有。它只是没有引发错误。

这通常是找不到属性类的情况,因为事实上您无法拥有通用属性。 XE7 中依然如此。

底线:即使它确实编译了您的可执行文件也不会包含该属性。

关于delphi - 带数组参数的属性构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27928740/

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