delphi - 如何在类中正确实现 Set 作为属性?

标签 delphi delphi-xe

假设我有以下示例:

  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;

错误消息是:

Incompatible types: 'TDelphiIDECompatibility' and 'Set'

<小时/>

我知道的快速方法是将它们声明为常规 bool 值,如下所示:

private
  FDelphi1Compatible: Boolean;
  FDelphi2Compatible: Boolean;
  FDelphi3Compatible: Boolean;
public
  constructor Create;
  destructor Destroy; override;

  property Delphi1Compatible: Boolean read
    FDelphi1Compatible write FDelphi1Compatible;
end;

但是当我可以在集合/枚举中定义它们时,我真的不喜欢这样?

我应该怎么做才能正确声明它?

谢谢。

最佳答案

根据 TLama 的评论,我查看了 Anchors 的 Delphi 源代码,并在这里提出了解决方案:

TDelphiIDECompatibilityKind = (
  Delphi1,
  Delphi2,
  Delphi3);

TDelphiIDECompatibility = set of TDelphiIDECompatibilityKind;

还有类(class):

private
  FIDECompatibility: TDelphiIDECompatibility;
public
  constructor Create;
  destructor Destroy; override;

  property IDECompatibility: TDelphiIDECompatibility read
    FIDECompatibility write FIDECompatibility;
end;

关于delphi - 如何在类中正确实现 Set 作为属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579145/

相关文章:

delphi - 如何将 Unicode 字符串写入控制台屏幕缓冲区?

delphi - 如何在客户端连接的 ListView 中存储标识符 - Indy 10

delphi - 如何制作 firemonkey HUD 窗口

delphi - 如何(正确)使用带有实时绑定(bind)的枚举类型(TObjectBindSourceAdapter)

Delphi 中类 Java 的集合

delphi - 销毁 Thread 对象的正确方法

delphi - 无法将类型化字符数组传递给打开的字符数组?

delphi - 如何在 Delphi XE 中使用 RTTI 设置记录值

delphi - 如何在delphi中调用事件而无需用户干预?

delphi - 如何强制预构建脚本在每次编译时运行