delphireferencetcollection

Saving vcl objects references in dephi with Tcollection


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?


Solution

  • 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>;