Delphi 如何在类中正确地实现集作为属性?
假设我有以下例子:Delphi 如何在类中正确地实现集作为属性?,delphi,delphi-xe,Delphi,Delphi Xe,假设我有以下例子: TDelphiIDECompatibility = ( Delphi1, Delphi2, Delphi3); 从一个类中,如何将上述内容作为属性正确实现 其思想是,在我的组件中,我希望有一个字段,允许您为集合中的某些元素选择True或False 我试图这样宣布,但运气不太好: TMyClass = class private FIDECompatibility: Set of TDelphiIDECompatibility; public
TDelphiIDECompatibility = (
Delphi1,
Delphi2,
Delphi3);
从一个类中,如何将上述内容作为属性正确实现
其思想是,在我的组件中,我希望有一个字段,允许您为集合中的某些元素选择True或False 我试图这样宣布,但运气不太好:
TMyClass = class
private
FIDECompatibility: Set of TDelphiIDECompatibility;
public
constructor Create;
destructor Destroy; override;
property IDECompatibility: TDelphiIDECompatibility read
FIDECompatibility write FIDECompatibility;
end;
错误消息已被删除:
不兼容的类型:“TDelphiIDECompatibility”和“Set”
我知道的最快方法就是将它们声明为普通布尔值,如下所示:
private
FDelphi1Compatible: Boolean;
FDelphi2Compatible: Boolean;
FDelphi3Compatible: Boolean;
public
constructor Create;
destructor Destroy; override;
property Delphi1Compatible: Boolean read
FDelphi1Compatible write FDelphi1Compatible;
end;
但我真的不喜欢这样,当我可以在集合/枚举中定义它们时
我应该怎么做才能正确地申报呢
谢谢。根据TLama的评论,我查看了Delphi源代码中的锚,并在这里提出了解决方案:
TDelphiIDECompatibilityKind = (
Delphi1,
Delphi2,
Delphi3);
TDelphiIDECompatibility = set of TDelphiIDECompatibilityKind;
班级:
private
FIDECompatibility: TDelphiIDECompatibility;
public
constructor Create;
destructor Destroy; override;
property IDECompatibility: TDelphiIDECompatibility read
FIDECompatibility write FIDECompatibility;
end;
从
锚定
属性中获得灵感Anchors
属于类型TAnchors
,定义为一组TAnchorKind。缺少的是集合类型声明:`TDelphiIDECompatibilitySet=TDelphiIDECompatibility;`属性和支持字段可以是这种类型。@TLama我已经完成了,现在似乎可以工作了,谢谢,将在答案中显示它,除非您想在编译器的消息中给出答案,该消息会准确地告诉您错误是什么。编译错误消息是开发人员最好的朋友—花一些时间尝试并理解它们—从长远来看,它将节省您的时间。:)@Vector这只是我最近收到的错误消息,当我尝试其他方法时,我得到了更多的错误,有时甚至在编译器消息的帮助下,它并不总是清楚问题/解决方案是什么。你明白了。请注意,您的构造函数应该是:constructor Create(AOwner:TComponent);覆盖
@CraigYoung谢谢:)但如果只是普通课程,我还需要这个吗?我认为只有当它是TComponent派生类时才适用?不,但你的问题说你想在组件中使用它。我应该澄清一下。当然,您也可以选择使用非组件构造函数作为组件中的附加构造函数。@CraigYoung是的,它是用于组件的,但我在主组件之外有单独的类,像这样的类。主组件没有Create(AOwner:TComponent);覆盖代码>这是我真正知道的一件事:)但无论如何,谢谢你的提及,很高兴看到人们互相关心;)FWIW,正如@Craigyong在其删除的答案中所指出的,惯例是将enumTDelphiIDECompatibility
(IOW,单数名词)和相应的集合TDelphiIDECompatibility
(其复数形式)称为enum。