Delphi对象:TObjectList迭代的快捷方式
我开始学习并在我的项目中积极使用OOP。我发现像Delphi对象:TObjectList迭代的快捷方式,object,oop,delphi,iteration,delphi-10.4-sydney,Object,Oop,Delphi,Iteration,Delphi 10.4 Sydney,我开始学习并在我的项目中积极使用OOP。我发现像LDevices.Devices[I]这样的结构看起来非常麻烦,使代码难以阅读 所以我的问题是:有没有什么方法可以让一个字段像LDevices[i],而不是LDevices.Devices[i]那样快捷地访问它设备是对象列表 我的对象的结构,供参考: TDeviceStorage = class (TObject) private DevicesByID: TDictionary<Integer,TDevice>;
LDevices.Devices[I]
这样的结构看起来非常麻烦,使代码难以阅读
所以我的问题是:有没有什么方法可以让一个字段像LDevices[i]
,而不是LDevices.Devices[i]
那样快捷地访问它<代码>设备是对象列表
我的对象的结构,供参考:
TDeviceStorage = class (TObject)
private
DevicesByID: TDictionary<Integer,TDevice>;
public
Devices: TObjectList<TDevice>;
Constructor Create;
Destructor Destroy; override;
procedure AddDevice(aID: Integer; aName, aShortName: String; aSubtype, aLocation: Integer; aSteamID: String);
procedure Clear();
function Count(): Integer;
function DeviceByID(aID: Integer): TDevice;
function DeviceIndex(aID: Integer): Integer;
end;
TDeviceStorage=class(TObject)
私有的
DevicesByID:TDictionary;
公众的
设备:TObjectList;
构造函数创建;
毁灭者毁灭;推翻
过程AddDevice(aID:Integer;aName,aShortName:String;aSubtype,aLocation:Integer;aSteamID:String);
程序清晰();
函数Count():整数;
函数DeviceByID(aID:Integer):t设备;
函数DeviceIndex(辅助:整数):整数;
结束;
是的,这正是使用的目的:
TDeviceStorage=class(TObject)
私有的
FDevicesByID:t字典;
f设备:TObjectList;
函数GetDeviceCount:整数;
函数GetDevice(索引:整数):TDevice;
过程SetDevice(索引:整数;常量值:TDevice);
公众的
构造函数创建;
毁灭者毁灭;推翻
过程AddDevice(AID:Integer;const AName,AShortName:string;
ASubtype,位置:整数;常量:字符串);
程序清晰;
函数DeviceByID(AID:Integer):t设备;
函数DeviceIndex(辅助:整数):整数;
属性设备[索引:整数]:t设备读取GetDevice写入SetDevice;违约
属性DeviceCount:整数读取GetDeviceCount;
结束;
与
函数TDeviceStorage.GetDevice(索引:整数):TDevice;
开始
结果:=FDevices[指数];
结束;
函数TDeviceStorage.GetDeviceCount:整数;
开始
结果:=FDevices.Count;
结束;
过程TDeviceStorage.SetDevice(索引:整数;常量值:TDevice);
开始
f设备[索引]:=值;
结束;
现在,如果
DS:TDeviceStorage
,您可以编写DS[i]
来访问FDevices
中的i
第四个设备。我编辑了您的问题,删除了第二个不相关的问题。这里每次只问一个问题。将设备设为私有,并声明一个标记为默认值的数组属性,该属性返回设备的第i项。也就是说,奇怪的是,有两个集合持有相同的对象。“你为什么这样做呢?”戴维德费曼回答有点复杂。简短版本:没有强有力的理由。长版本:我们有一些遗留支持问题,导致某些东西有两个ID。一个始终是连续的:0、1、2、3、4等。另一个是来自DB ID的,其中有洞:1、3、8、9等。因此,如果我必须通过第二个ID获取设备,我使用字典。第二个原因是孩子们用不止一本字典来搜索对象,用第二个ID以外的其他字段来搜索。我搞不清楚以前谁拥有什么。谢谢!很好的解释+同样,考虑为类实现枚举器,然后可以在不使用索引的情况下在循环中枚举它。