Newsgroup: it.comp.lang.delphi
Titolo: clone classe

Ho creato una classe con il nome manart.
La istanzio con 2 nomi diversi in una procedura.
procedure TForm1.caricaArchivio;
var
  omanart: manart;
  omanart1: manart;
begin
  omanart:= manart.Create;
  omanart.codice:= 1;
  omanart.descr:= 'Articolo';
  omanart1:= manart.Create;
  omanart1:= omanart;
  omanart1.descr:= 'Descr1'
end;
I passi che faccio sono questi:
- creo la prima istanza;
- setto le proprietà della prima istanza;
- creo la seconda istanza;
- assegno alla seconda istanza la prima istanza;
- modifico una proprietà;
Il problema è che modificando una proprietà della seconda istanza viene
modificata la stessa proprietà nella prima istanza. Come faccio a crearmi un
clone della classe come è possibile farlo in Java con l'istruzione clone()?
Grazie mille.

Questa riga qui fa si che il puntatore (cioč, l'hanlde di omanart1) 
venga sovrascritto da quello di omanart:
 >   omanart1:= omanart;
TRattasi di un bel esempio di memory leak in quanto cio' che č stato 
allocato nella create di omanart1 non potrŕ essere liberato salvo la 
chiuusra della applicazione.
Non so come lavora la "clone" di java, purtroppo.
La prima coaa che mi viene in mente č che la tua classe dovrebbe 
supportarte il metodo assign.
Bye
A

 La prima coaa che mi viene in mente è che la tua classe dovrebbe


 supportarte il metodo assign.
Esatto, il metodo clone di java "copia" in pratica crea una copia di se
stesso, quindi è corretto pensare di usare l'assign di delphi
-- 
Lis
Mercatino: 
http://snurl.com/sito_lis
FAQ di it.comp.lang.delphi: 
http://snipurl.com/faq_icld

 ha scritto nel messaggio
news:1anoc4thj8m6h$.dlg@lis.lis.lis...


 metodo assign?
guida in linea rulex
A

 ha scritto nel messaggio
news:2hgifoF...@uni-berlin.de...


 ha scritto nel messaggio
news:c8v4vg$n2a$1...@fata.cs.interbusiness.it...


 mi potresti fare un esempio...
Ecco come funziona l'Assign della classe TStrings:
procedure TStrings.Assign(Source: TPersistent);
begin
  if Source is TStrings then
  begin
    BeginUpdate;
    try
      Clear;
      FDefined := TStrings(Source).FDefined;
      FQuoteChar := TStrings(Source).FQuoteChar;
      FDelimiter := TStrings(Source).FDelimiter;
      AddStrings(TStrings(Source));
    finally
      EndUpdate;
    end;
    Exit;
  end;
  inherited Assign(Source);
end;
per il resto, c'è la guida in linea


> mi sapresti fare un esempio d'implementazione del metodo assign?
due istanze di una classe:
TClasse = class
public
   property IntProp: integer
   property StringProp: string;
end;
clone=assign=2 istanze *diverse* aventi valori *uguali*, giusto?
quindi, come potrebbe essere fatto un metodo che assegna a istanza2 gli 
stessi valori delle property di istanza1?
che parametri di ingresso dovrebbe avere?
cosa dovrebbe fare?
A

 ha scritto nel messaggio
news:c8v7gb$2lff$1...@newsreader2.mclink.it...


 property(Index, read,write clause expected, but ';' found)
ma hai dato almeno una occhiata alla dichiarazione delle property nella 
guida di delphi?
A

 > versione 6 di delphi. L'errore che mi esce č per tutte le righe con


 ha scritto nel messaggio
news:c8vcov$2nup$1...@newsreader2.mclink.it...


 Potresti fornirmi un esempio dettagliato?
Il nostro amico Alberto sta cercando di farti capire ... Quì non puoi
chiedere qualsiasi cosa ti venga in mente
senza aver aperto il manuale oppure il buon vecchio google .. ti ha detto
praticamente tutto sull'argomento.
Senza offenderti ... studia un pochino :)))
 property valore: String read FValore write SetValore;
Ciao :)!!!
--
Gabriele Santomaggio
---
I governi che sopprimono la libertà di parola (...) fanno come quei
bambini che chiudono gli occhi per non farsi vedere.
(L. Boerne)