首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Delphi XE在类中存储泛型数组

使用Delphi XE在类中存储泛型数组
EN

Stack Overflow用户
提问于 2012-06-06 02:46:04
回答 1查看 1.1K关注 0票数 3

使用下面的结构,如何定义我的TAnimalCollection类以存储我的集合?调用SelectAll或SelectTop10将更新SelectedRecords。删除私有字段允许编译代码,但是没有机制来存储返回的结果集。

代码语言:javascript
复制
  TDog = class
  private
    FBreed: string;
  public
    property Breed: string read FBreed write FBreed;
  end;

  TCat = class
  private
    IsWild: string;
  public
    property IsWild: string read FIsWild write FIsWild;
  end;

  TMyArray<T> = array of T;

  TAnimalCollection = class
  private
    SelectedRecords: TMyArray<T>; // Generates: Undeclared Identifier: 'T'
  public
    function SelectAll<T>: TMyArray<T>;
    function SelectTop10<T>: TMyArray<T>; 
    // Other Methods
  end;
EN

回答 1

Stack Overflow用户

发布于 2012-06-06 04:45:52

首先,您不需要TMyArray;内置的TArray类型也是如此。

不过,编译器是正确的。在您的字段声明中,没有像T这样的东西。泛型参数需要在声明的左边引入,然后才能在右边使用。如果支持泛型字段,则声明如下所示:

代码语言:javascript
复制
SelectedRecords<T>: TArray<T>;

,但它不是,在这种情况下,您也不会希望它这样做。显然,您希望将两个完全不相关的类同时存储在同一个数组中。数组总是一种类型。唯一统一TDogTCat的类型是TObject,因此您的数组必须是该类型的:

代码语言:javascript
复制
SelectedRecords: TArray<TObject>;
// or, more conventionally,
SelectedRecords: array of TObject;

欢迎您声明一个“泛型数组”,但只作为泛型类的字段或泛型方法的变量。如果可以声明独立的泛型数组,请考虑何时确定数组元素的实际类型。如果不是在声明数组的点,那么什么时候?使用类和方法,在声明类的变量、实例化类或调用方法时,可以指定类型参数。这些用途与它们的声明是分开的,而且每种用途都是不同的。当您声明一个变量时,您必须以声明它的方式使用它--如果不重新编译程序,变量的类型就不能改变。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10907555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档