Ver Mensaje Individual
  #2  
Antiguo 02-06-2010
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Reputación: 21
Faust Va por buen camino
Yo tampoco los he usado mucho, de hecho solo últimamente y te comento según mi experiencia:

inherited lo he usado cuando creo descendientes de objetos, ¿qué hace exactamente? cuando creo un descendiente p. ejemplo. de un TThread y requiero que tenga funcionalidad más allá de la clase TThread, por lo que es posible que requiera de un objeto extra auxiliar, p. ej. un TList.

Código Delphi [-]
interface

type
  TMyThread = class(TThread)
  private
    { Private declarations }
    FMaxProcs: Integer;
    FDelay: Integer;
    FProcList: TList;
  public
    constructor Create(Delay, MaxProcs: Integer; AppHandle: THandle); reintroduce; overload;
    destructor Destroy; override;
    procedure KillMe;
  protected
    procedure Execute; override;
  end;

...
...
...

implementation

constructor TMyThread.Create(Delay, MaxProcs: Integer; AppHandle: THandle);
begin
  inherited Create(True);
  FProcsLst:= TList.Create;
  ...
  FDelay:= Delay;
  FMaxProcs:= MaxProcs;
  FAppHandle:= AppHandle;
  Resume
end;

Sobrecargo el Create original del TThread indícándolo con la directiva overload en interface, redefino Create en implementation y la primera línea que pongo es inherited Create(False), lo que hace es heredar o llamar al procedimiento original Create de la clase donde incluso puedo poner parámetros, si pongo solamente inherited, el compilador asume que llamo o heredo el procedimiento del mismo nombre en el que está, despues de crear el objeto ahora si seteo algunas propiedades o hago lo que yo quiera.

En cuanto a override anula el procedimiento de la clase que heredo y lo sobreescribe, en el ejemplo anterior tengo en la definición de la clase Destroy declarado así:

Código Delphi [-]
destructor Destroy; override;

Lo que hago es que el método Destroy de TThread ya no lo puedo usar, pero lo sobreescribo, en implementation tengo esto:

Código Delphi [-]
destructor TMyThread.Destroy;
begin
  FProcsLst.Free;
inherited
end;

Ahora es como si intercambiara el método TThread.Destroy por TMyThread.Destroy, libero el TList que he estado usando y vuelvo a llamar inherited solito, inherited manda a llamar o ejecuta el Destroy de TThread.

Bueno, eso es lo poco que sé, pero si tienes alguna duda tal vez yo u otro compañero del for te ayudaremos.

Saludos
__________________
Herr Heins Faust
Responder Con Cita