8

我正在尝试编写一个使用泛型的属性:

type TMyClass = class
  protected
    function GetCountBy<T: Class>: Integer;
  public
    property CountBy<T: Class>: Integer read GetCountBy<T>;
  end;

但是在属性声明中编译失败,并显示消息“Property CountBy 在基类中不存在”,并且属性名称的开头 < 上出现红色波浪线。

有什么办法可以做到这一点?

编辑:这是我的另一个用例,它更复杂但更真实:

property ItemsBy<T: Class>[Index: Integer]: T read GetItemsBy<T> write SetItemsBy<T>;

该函数过滤列表的内容以返回指定类的第 Index 项。

4

2 回答 2

10

Delphi 不支持通用属性。只有泛型类或泛型方法。

我在文档中找不到任何明确说明该限制的内容。另一方面,文档仅描述了泛型类和泛型方法。支持泛型的新语言语法也没有提及属性。

于 2012-06-05T22:15:38.690 回答
1

我没有跟上泛型的速度,但声明不应该更像这样

  type TMyClass<T: class> = class
  protected
    function GetCountBy<T>: Integer;
  public
    property CountBy<T>: Integer read GetCountBy<T>;
  end;
于 2012-06-05T20:05:37.750 回答