问题
I am using delphi 2009 and VCL components. I have created a collection called TStreets made of items TStreet which has just two private fields. Now I need to add to Tstreet class another field/property to keep track (by using reference) of other objects of class TMyObject.
An example: let's assume that TStreet collection contains five elements and ten objects (TMyObject) exists in my application at run-time. Each objects of TMyObject can belong to only one TStreet so I need to save for each TStreet all reference of objects and then be able to move one or more object reference from one TStreet to another. Should I create another colletion under TStreet where saving object references?
Is it correct the way to go?
回答1:
Given the following.
TMyObject = class
  ...
end;
TStreet = class
 ...
 public
   property MyObject : TMyObject ...;
end;
TStreets = TList<TStreet>;
It appears from reading your question that a TMyObject can only be tied to one TStreet.
Then I would recommend reversing the references.
TStreet = class;
TMyObject = class
protected
  FStreet : TStreet;
public
  property Street : TStreet read FStreet write FStreet;
end;
TMyObjectList = TList<TMyObject>;
TStreet = class
 private
   // Looks through MyObjectList returning correct 
   function GetMyObjecty : TMyObject; reference.
 public
   property MyObject : TMyObject read GetMyObject;
   // Reference to list that contains all instance of TMyObjectList.
   property MyObjectList : TMyObjectList; 
end;
TStreets = TList<TStreet>;
TMyObjectList = TList<TMyObject>;
    来源:https://stackoverflow.com/questions/4994167/saving-vcl-objects-references-in-dephi-with-tcollection