Newsgroup: it.comp.lang.delphi
Titolo: inherited

ciao a tutti,
mi trovo questa funzione:
function TFigli.GetItem(Index: Integer): TFiglio;
begin
  Result := TFiglio(inherited GetItem(Index));
end;
ho provato a leggere un pò in giro ma non ho capito molto bene cosa fa
e come funzione l'inherited in questo caso.
qualcuno mi può aiutare?.. grazie
--
mnoga

Te la scrivo in modo piu comprensibile, e anche piu' sicura..
function TFigli.GetItem(Index: Integer): TFiglio;
var
  TempObject: TObject;
begin
   Result := nil;
   TempObject := inherited GetItem(Index);
  // questa verifica manca nel codice che hai postato tu.
 //  Li, se il metodo della superclasse chiamato con inherited
restituisce nil hai una accesso violation!
   if (Assigned(TempObject)) then
   begin
     Result := TFiglio(TempObject);
  end;
end;
A.


molto gentile, però siccome son duro di mio,non capisco bene a che
serve l'inherited.. riusciresti a spiegarmelo con parole molto
semplici? :)
poi,per superclasse intendi la classe padre?
grazie mille ancora eh!
--
mnoga

Se hai un oggetto (esempio TMioOggetto) che ha una funzione chiamata, 
per esempio, MiaFunzione
TMioOggetto = Class
public
   Function MiaFunzione : Integer;
End;
e derivi da questo un secondo oggetto che, oltre a funzioni sue riscrive 
anche la MiaFunzione
TAltroOggetto = Class(TMioOggetto)
public
   Function MiaFunzione : Integer;
End;
e, devi richiamare la funzione del padre come fai?
Semplice! Usi la parola chiave Inherited. Questa permette di chiamare la 
funzione/procedura del padre anche se l'hai riscritta
Function TAltroOggetto.MiaFunzione : Integer;
Begin
   // qui' chiamo la funzione del genitore
   Result := Inherited MiaFunzione;
   <qui faccio qualcosa di mio>
End;
Questo e' un esempio idiota solo per farti capire ovviamente..
Bye

 Bye
grazie mille credo di aver capito :)
--
mnoga


Diciamo quasi.
Se ho una un oggetto padre che ha la funzione Funzione1 e, ho un oggetto 
derivato che ridichiara la stessa il mio albero sarebbe
Padre
!
! Funzione1
!
Figlio
!
!
! Funzione1
Ora, se chiamo
Figlio.Funzione1 il compilatore richiama solamente la Funzione1 
ridichiarata
Mentre se chiamo
Padre.Funzione1 il compilatore richiama quella del padre
Con inherited nella funzione figlio alla chiamata
Figlio.Funzione1 il compilatore chiama quella ridichiarata e, quando 
incontra la clausola inherited chiama quella del padre e poi ritorna a 
quella del figlio
Per esempio se nella funzione del figlio scrivo
Begin
   FunzioneFiglio1
   FunzioneFiglio2
   inherited Funzione1
   FunzioneFiglio3
   FunzioneFiglio4
End
La procedura del Padre verr� invocata dopo la funzione FunzioneFiglio2 e 
prima della FunzioneFiglio3

 prima della FunzioneFiglio3
ok, quindi quando trova "inherited funzione1" è come se richiamasse
una qualsiasi altra funzione,solo che con questo inerited chiama la
funzione del padre ,che si chiama uguale.
cioè se per esempio padre.funzione1 richiamasse semplicemente una
funzione qualsiasi della form, per me sarebbe uguale per il figlio
richiamare la funzione del padre con inherited oppure richiamare
direttamente l'altra funzione?
scusa se faccio confusione magari ma non vedo quale sia il vero e
proprio vantaggio rispetto all'usare una funzione a parte e dover
richiamare proprio quella del padre...

 richiamare proprio quella del padre...
I tanti vantaggi dell'OOP � poter scrivere codice ordinato, pulito e 
manutenibile, mantenere la retrocompatibilit� estendolo e non 
riscrivendolo, riutilizzo , dimensioni ridotte grazie alla modularit� etc...
-- 
Il silenzio ti fa vedere ci� che il rumore non ti fa cogliere ..