<div dir="ltr"><div class="gmail_extra">Here is a preferable solution:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">    property Controls: IControlEnumerator read GetItems;</div><div class="gmail_extra"><br></div><div class="gmail_extra">This allows for both:</div><div class="gmail_extra"><br></div><div class="gmail_extra">  for C in Test.Controls do ShowMessage(C.Name);</div><div class="gmail_extra">  // or</div><div class="gmail_extra">  for I := 0 to Test.Controls.Count - 1 do ShowMessage(Test.Controls[I]);</div><div class="gmail_extra"><br></div><div class="gmail_extra">That is you can access the property as either an enumerable collection, or and an indexed collection. Note it has support for a default indexer property and a count property. </div><div class="gmail_extra"><br></div><div class="gmail_extra">This is where where:</div><div class="gmail_extra"><br></div><div class="gmail_extra">  IControlEnumerator = IIndexedEnumerator<TControl>; </div><div class="gmail_extra"><br></div><div class="gmail_extra">And:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra"><div class="gmail_extra">type</div><div class="gmail_extra">  IIndexedEnumerator<T> = interface(IEnumerator<T>)</div><div class="gmail_extra">    function GetEnumerator: IIndexedEnumerator<T>;</div><div class="gmail_extra">    function GetCount: Integer;</div><div class="gmail_extra">    function GetItem(Index: Integer): T;</div><div class="gmail_extra">    property Count: Integer read GetCount;</div><div class="gmail_extra">    property Item[Index: Integer]: T read GetItem; default;</div><div class="gmail_extra">  end;</div><div class="gmail_extra"><br></div><div class="gmail_extra">And finally putting together Test object as a simple example. Note that TTest has full private access to the underlying container FList:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra">type</div><div class="gmail_extra">  TTest = class</div><div class="gmail_extra">  private</div><div class="gmail_extra">    FList: TList<TControl>;</div><div class="gmail_extra">    function GetItems: IControlEnumerator;</div><div class="gmail_extra">  public</div><div class="gmail_extra">    constructor Create(Controls: array of TControl);</div><div class="gmail_extra">    destructor Destroy; override;</div><div class="gmail_extra">    property Controls: IControlEnumerator read GetItems;</div><div class="gmail_extra">  end;</div><div><br></div></div></div></div></div></div>