FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Duda sobre creación de clase (Free y Destroy)
Hola a todos.
Estoy haciendo una clase, y la verdad tengo poca experiencia creando clases y componentes, pues solía usarlas más que crearlas... Y al crearlas, uno "vé" otras cosas que no veía antes... Mi duda es sobre la redefinición de métodos. Concretamente Destroy, y si debo redefinir también el método Free. Código:
type TTipoHabitacion = class(TObject) private FId: string; FNota: TStrings; FPrefijo: string; public constructor Create; destructor Destroy; override; property Id: string read FId; property Nota: TStrings read FNota; property Prefijo: string read FPrefijo; end; TTiposHabitaciones = class(TObject) private FLista: TStrings; function GetItems(Index: Integer): TTipoHabitacion; public constructor Create; destructor Destroy; override; procedure Actualizar; property Items[Index: Integer]: TTipoHabitacion read GetItems; default; property Lista: TStrings read FLista; end; Ahora incluyo el código de la implementación (resumido) de TTiposHabitaciones: Código:
constructor TTiposHabitaciones.Create; begin inherited Create; FLista := TStringList.Create; Actualizar; end; destructor TTiposHabitaciones.Destroy; begin inherited Destroy; end; procedure TTiposHabitaciones.Actualizar; var I: Integer; Qry: TMiQuery; TH: TTipoHabitacion; begin try Lista.Clear; // Aqui debo liberar FLista, incluido los objetos que ésta posea // Sé que debo usar Free, pero si Free no lo he redefinido, // Cómo se libera la lista realmente? Qry := BD.QryNuevo; with Qry do begin Close; SQL.Clear; SQL.Add('SELECT *'); SQL.Add('FROM TiposHab'); Open; for i := 1 to RecordCount do begin TH := TTipoHabitacion.Create; TH.FID := FieldByName('Id').AsString; TH.FPrefijo := FieldByName('Prefijo').AsString; // TH.FNota := ... Lista.AddObject(TH.FID, TH); Next; end; end; finally Qry.Free; end; end; function TTiposHabitaciones.GetItems(Index: Integer): TTipoHabitacion; begin Result := TTipoHabitacion(FLista.Objects[Index]); end; Código:
destructor TTiposHabitaciones.Destroy; begin FLista.Free; inherited Destroy; end; Estoy medio confundido con eso . Si alguien me pudiera echar una manita, le estaría muy agradecido. Muchas gracias de antemano. Un cordial saludo a todos |
#2
|
||||
|
||||
Cita:
Cita:
Cita:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
||||
|
||||
Cita:
// Saludos |
#4
|
||||
|
||||
¡Hola a todos!
Cita:
Cuando un objeto TObjectList tiene su propiedad OwnsObjects en True, los objetos de la lista son destruidos (liberados) automáticamente cuando éstos son eliminados de la lista y cuando el objeto lista contenedor es destruido. Espero esto sea de utilidad, seguimos en contacto. Al González. |
|
|
|