2010-04-18 53 views
4

我正在尝试创建一些允许我检索和操作应用程序将创建和管理的一组备份的类。创建类的集合的最佳方法

我想出了下面的代码(尚未测试),但我不确定这是否是实现此目的的最佳方式,或者是否有更简单/更好的方法。我正在使用德尔福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; 

你们是否有任何意见和/或例子的最佳方式来完成此?

谢谢!

回答

11

在Delphi 2010中,最好的方法是使用泛型。

使用这个,而不是你的自定义类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; 
+0

谢谢,这正是我所需要的。一个快速的侧面问题(与这一个有关),任何想法是否有可能不发布所有的TObjectList属性到我从它派生的类? – smartins 2010-04-19 15:54:10

+1

更新了我的答案。 – 2010-04-19 16:31:25