RE:cual e la diferencia ?
Verás, "inherited" solito llama al método del ancestro con igual nombre y tipo de parámetros que el método actual, mientras que "inherited Método[(parámetros)]" llama a un método específico, que no necesariamente tiene el mismo nombre y parámetros que que el método actual. Ejemplo:
type
TBase = class
FCampo: integer;
public
constructor Create; overload;
constructor Create(x: integer); overload;
end;
TDerivada = class(TBase)
public
constructor Create(z: integer);
end;
constructor TBase.Create;
begin
FCampo := 0;
end;
constructor TBase.Create(x: integer);
begin
FCampo := x;
end;
constructor TDerivada.Create(z: integer);
begin
inherited Create;
end;
En TDerivada.Create llamamos a "inherited Create;". Como fuimos explícitos, se llamará al método TBase.Create que no recibe parámetros. Si fuese el caso que TBase no tuviera un método así, se buscará en su ancestro, es decir que en este ejemplo se ejecutaría TObject.Create.
Si en TDerivada.Create hubiéramos invcado sólo a "inherited;" entonces se llamará a TBase.Create(x: integer), pues es el método ancestral que coincide en nombre y tipo de parámetros que el procedicmiento actual (TDerivada.Create(z: integer)). Se pasará el valor del parámetro "z" como el valor del parámetro "x" (en la llamada de ejemplo, el valor es 2).
Ernesto D'Spirito