Newsgroup: it.comp.lang.delphi
Titolo: Re: Ereditarietà, polimorfismo e metodi statici

della gerarchia.
infatti :(
purtroppo non trovo un altro punto di accesso alla
gerarchia VCl che mi permetta di rendere la mia classe
compatibile.
Vabbene ... allora mi limiterò a sovrascrivere il
metodo Notify di TObjectList affidandomi ai tre stati
di TListNotification.
	Ciao
	MassimoB
 
---------------------------------
http://www.massimobeschi.it/
---------------------------------
Se tu pagare come dici tu ...
Io lavorare come dico io ...
Se tu pagare come dico io ...
Io lavorare come dici tu ...
---------------------------------

Ciao a tutti,
ho un problem"ino" da porvi.
Sto creado una mia Lista personalizzata ereditata da
TObjectList. Il problema sta nel fatto che TObjectList
presenta metodi statici per l'accesso alla lista di
elementi interni. Tali metodi non possono essere quindi
modificati mediante override nella mia classe
ereditata. Ho quindi utilizzato la parola chiave
reintroduce che da help "Use reintroduce when you want
to hide an inherited virtual method with a new one.",
dice "virtual" ma comunque mi fa compilare se
reintroduco un metodo statico. E gią qui nutro
seridubbi ... bhooo 0_o
Comunque, prendiamo in considerazione solo il metodo
Add, per esempio:
--------------------------------------------------------------------
TMyObjectList = class(TObjectList)
...
public
  function Add(AObject: TObject): Integer; reintroduce; overload; virtual;
  function Add(AObject: TMyObj): Integer; overload; virtual;
  ...
end;
...
function TMyObjectList.Add(AObject: TMyObj): Integer;
begin
  Result := inherited Add(AObject);
  AObject.MyProperty := 'Massimo';
end;
function TMyObjectList.Add(AObject: TObject): Integer;
begin
  Result := Self.Add(TMyObj(AObject));
end;
------------------------------------------------------------------
fino a qui compila ed č tutto ok. Il problema sorge
nell'utilizzzo di tale lista.
-----------------------------------------------------------------
  Fobj := TMyObjectList.Create;
  Fobj.Add(TMyObj.Create(nil));
  (Fobj as TObjectList).Add(TMyObj.Create(nil));
  TObjectList(Fobj).Add(TMyObj.Create(nil));
-----------------------------------------------------------------
le prime due righe aggiungono un nuovo elemento con
MyProperty valorizzato correttamente, con valore
'Massimo', mentre l'ultima riga di codice sembra chiami
comunque il metodo del genitore anche se l'ho
reintrodotto nella mia classe.
Sapete perchč? e/o come fare per riuscire ad ottenere
il nuovo comportamento di Add anche nell'ultimo caso?
Vorrei riuscire ad ottenere una lista compatibile con
una casting a TObjectList ma, in cui, possa modificare,
in tutti i casi, i comportamenti dei metodi ereditati.


   Marco.
grazie Marco


 un'eccezione o sbaglio?
Certo, la tua classe non sarebbe una TObjectList.
In ogni caso, considera che, comunque, la tua classe non sarebbe usabile
al posto di una TObjectList, per la mancanza di metodi virtuali alla base
della gerarchia.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 in tutti i casi, i comportamenti dei metodi ereditati.
Se i metodi non sono virtuali, è difficile ottenere quanto desideri, ma 
puoi sempre valutare il fatto di agire per "composizione" creando una 
classe derivata da *TObject* e creare al suo interno un'istanza di 
*TObjectList*, fornendo metodi alla tua classe che, alla fine, siano 
ricondotti alla chiamata di un metodo dell'istanza di *TObjectList* 
interna. :-/
Ciao,
   Marco.
-- 
MARCO «Alka» BREVEGLIERI
   (
http://www.marco.breveglieri.name
)
Leggi le FAQ di ICLD: 
http://icld.altervista.org