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在其删除的答案中所指出的,惯例是将enum
TDelphiIDECompatibility
(IOW,单数名词)和相应的集合
TDelphiIDECompatibility
(其复数形式)称为enum。