2010-04-18 6 views
4

J'essaie de créer des classes qui me permettent de récupérer et de manipuler un ensemble de sauvegardes que mon application va créer et gérer.Meilleure façon de créer une collection d'une classe

J'ai mis au point le code suivant (pas encore testé), mais je ne suis pas sûr que ce soit la meilleure façon d'y parvenir ou s'il y a un moyen plus facile/meilleur. J'utilise Delphi 2010.

J'ai une classe qui contient les détails de la sauvegarde (TBackupItem), alors j'ai besoin d'une classe qui contiendra une collection de TBackupItem et enfin je vais avoir une classe qui gère la lecture et l'écriture de sauvegardes et expose également une propriété qui accède à la collection de 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; 

Avez-vous des commentaires et/ou des exemples sur la meilleure façon d'y parvenir?

Merci!

Répondre

11

En Delphi 2010, la meilleure approche serait d'utiliser des génériques.

Utilisez cette place de votre classe personnalisée TBackupsList:

TBackupsManager = class 
private 
    FBackups: TObjectList<TBackupItem>; 

(Vous devez inclure Generics.Collections).

Si votre collection a besoin d'autres méthodes, vous pouvez garder TBackupsList et hériter de TObjectList<TBackupItem>:

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

EDIT: Si vous souhaitez utiliser une coutume TBackupsList, mais ne veulent pas avoir tous les méthodes publiques TObjectList a, vous ne pouvez pas utiliser l'héritage. Au lieu de cela, vous devez utiliser la composition:

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

Merci, cela a fonctionné exactement comme j'avais besoin. Une question rapide (liée à celle-ci), une idée s'il est possible de ne pas publier toutes les propriétés de TObjectList dans la classe dont je dérive? – smartins

+1

Mis à jour ma réponse. –