Quizás estemos usando el TObjectList cuando no deberíamos usarlo.
Me explico: TObjectList está pensado para guardar una lista de objetos, su principal cualidad (por decirlo así) es encontrar los objetos por su posición (índice) o bien por su dirección (puntero de TObjects), si no necesitamos estas características, quizás no deberíamos usar esta clase.
Tenemos una lista de Edits creados en tiempo de ejecución y cuando el usuario teclea debemos localizarlo, ¿para qué complicarnos la vida añadiendo un nombre único a cada TEdit y después usar ese nombre para encontrarlo? Si tenemos el objeto Sender ya podemos encontrar por ese puntero (haciendo uso de TObjectList.IndexOf) el Tedit en cuestión dentro de nuestra lista (no creo que vayamos a tener 10.000 TEdits creados en un Form
). Usar FindComponent será más costoso que el TobjectList.IndexOf, precisamente porque habrá más controles creados en el form, y su búsqueda tardará más.
Otra pega que le veo al StringList, es precisamente tener un único identificador para localizar el objeto, ¿qué ocurre si quiero localizar un Objeto por alguna propiedad que lleva dentro dicho objeto?, pues tenemos la misma desventaja que al usar TObjectList, tenemos que hacer un bucle, recorriendo todos los objetos que tiene el StringList y buscando la dichosa propiedad.
Yo al menos, jamás he derivado de TStrings o TStringList para obtener funcionalidades extras, sin embargo, si lo he hecho de TObjectList para tratar mis propios objetos sin tener que aplicar moldeo de tipos en mi programa principal. Para mí, ya es muy clarificador el código resultante y si le veo utilidad hacerlo.
El método Sort de un TObjectList es también muy útil, ya que creando varias funciones de ordenamiento permite realizar auténticas virguerías con los objetos creados.
Aquí un ejemplo práctico:
TFolders es un TObjectList, cada elemento vuelve a ser un TObjectList (TFolder) , por último, cada elemento de este último TObjectList es un TObject a secas (TPathElement), que tendrá una serie de propiedades inherentes a cada archivo, como:
- ruta relativa de una dada
- ruta absoluta
- tamaño del archivo
- etc.
Código Delphi
[-]
TSort = (sCaption, sValue,sNone);
TFolder = class(TDualList)
public
function Size :Int64; end;
TFolders = class(TObjectList)
private
function GetItem(Index: Integer): TFolder;
procedure SetItem(Index: Integer; const Value: TFolder);
public
function Add(AObject: TFolder): Integer;
procedure Sort(const SortBy:TSort;const Order:TSortOrder);overload;
procedure Sort(funcion:TListSortCompare);overload;
property Items[Index: Integer]: TFolder read GetItem write SetItem; default;
end;
Saludos