Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Uso de inherited y override (https://www.clubdelphi.com/foros/showthread.php?t=68235)

JoAnCa 02-06-2010 15:37:52

Uso de inherited y override
 
Hola a todos
Sera porque lo he usado muy poco, y cuando lo he hecho es en procedimientos ya elaborados, pero aun no entiendo el funcionamiento de inherited y override :confused:

Me podrian explicar que hace cada uno, y en que situación es cuando se deben emplear?

Faust 02-06-2010 17:14:32

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


La franja horaria es GMT +2. Ahora son las 22:11:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi