Лучший способ создать коллекцию класса - PullRequest
4 голосов
/ 18 апреля 2010

Я пытаюсь создать несколько классов, которые позволят мне извлекать и управлять набором резервных копий, которые мое приложение будет создавать и управлять.

Я придумал следующий код (еще не тестировался), но я не уверен, является ли это лучшим способом достижения этого или есть какой-то более простой / лучший способ. Я пользуюсь Delphi 2010.

У меня есть класс, который содержит детали резервного копирования (TBackupItem), затем мне нужно иметь класс, который будет содержать коллекцию TBackupItem, и, наконец, у меня будет класс, который управляет чтением и записью резервных копий, а также предоставляет свойство, которое обращается к коллекции TBackupItem.

type
  TBackupItem = class
  private
    FBackupProgram: string;
    FBackupProgramVersion: string;
    // There are more variables and properties but for the sake of simplicity I've listed only two
  public
    property BackupProgram: string read FBackupProgram write FBackupProgram;
    property BackupProgramVersion: string read FBackupProgramVersion write FBackupProgramVersion;
  end;

  TBackupsList = class(???)
  private
    // This class will hold a list of TBackupItem. What should I use to accomplish this?
  end;

  TBackupsManager = class(TObject)
  private
    FBackups: TBackupsList;
  public
    property Backups: TBackupsList read FBackups write FBackups;
  end;

Ребята, есть ли у вас какие-либо комментарии и / или примеры, как лучше всего это сделать?

Спасибо!

1 Ответ

12 голосов
/ 18 апреля 2010

В Delphi 2010 лучшим подходом будет использование Generics.

Используйте это вместо своего пользовательского класса TBackupsList:

TBackupsManager = class
private
  FBackups: TObjectList<TBackupItem>;

(Вы должны включить Generics.Collections).

Если вашей коллекции требуются дополнительные методы, вы можете сохранить TBackupsList и унаследовать ее от TObjectList<TBackupItem>:

TBackupsList = class(TObjectList<TBackupItem>)      
public 
  function MyAdditionalMethod: Integer;
end;

РЕДАКТИРОВАТЬ: Если вы хотите использовать пользовательский TBackupsList, но не хотите, чтобы все общедоступные методы TObjectList, вы не можете использовать наследование. Вместо этого вы должны использовать состав:

TBackupsList = class
private
  FItems: TObjectList<TBackupItem>
public 
  //Duplicates of the original TObjectList public methods accessing FItems.
end;
...