|
| Kopierer indhold fra et objekt til et ande~ Fra : Esben Piltoft |
Dato : 04-06-03 06:37 |
|
Hvis man får brug for at kopierer alt indhold fra et objekt til at
andet, hvordan gør man så det ??
Er man så nødt til at kopierer alle data i et objekt hver for sig over
i det andet objekt ??
Jeg prøvede objekt2 = objekt1, men det virker kun første gang man gør
det. Efterfølgende gange forsvinder indholdet i både objekt1 og
objekt2 – havde det virket havde det jo været det letteste.
Nogen der har et løsningsforslag ??
På forhånd tak (Esben)
//**** 8< Koden der giver mig grå hår 8< ********
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls;
type
TTest = class
private
FmyStr: String;
public
function GetStr: string;
procedure SetStr(s: string);
end;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
myTest1: TTest;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
myTest1 := TTest.Create;
myTest1.SetStr('str1');
label1.Caption := myTest1.GetStr;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
myTest2: TTest;
begin
myTest2 := TTest.Create;
myTest2 := myTest1;
label1.Caption := myTest1.GetStr;
label2.Caption := myTest2.GetStr;
myTest2.Free;
end;
procedure TTest.SetStr(s: string);
begin
FmyStr := s;
end;
function TTest.GetStr: string;
begin
result := FmyStr;
end;
end.
//**************
| |
Klaus Petersen (04-06-2003)
| Kommentar Fra : Klaus Petersen |
Dato : 04-06-03 08:58 |
|
> Jeg prøvede objekt2 = objekt1, men det virker kun første gang man gør
> det.
Det er fordi objekt2 og objekt1 kun er pointere - dvs. de indeholder bare en
adresse til et objekt i hukommelsen - altså de indeholder ikke selve
objektet.
Når du sætter dem lig hinanden, sætter du objekt2's pointer til at være
objekt1's pointer og begge pointere kommer altså til at pege på samme
fysiske objekt.
Så når du sletter det fysike objekt, bliver begge pointere ugyldige.
Hvis du skal lave en kopi, bliver du nødt til at skabe et nyt objekt af
samme type og kopiere attributterne over i det nye objekt - det er muligt at
delphi har en smart ordning til dette formål, men jeg kender den ikke.
| |
Thor (06-06-2003)
| Kommentar Fra : Thor |
Dato : 06-06-03 07:10 |
|
Prøv a.assign(b);
-> kopierer indholdet af b over i a;
// Thomas
"Klaus Petersen" <ng@spectual.ra.bnaa.dk> wrote in message
news:bbk8qd$a4n$1@sunsite.dk...
> > Jeg prøvede objekt2 = objekt1, men det virker kun første gang man gør
> > det.
>
> Det er fordi objekt2 og objekt1 kun er pointere - dvs. de indeholder bare
en
> adresse til et objekt i hukommelsen - altså de indeholder ikke selve
> objektet.
>
> Når du sætter dem lig hinanden, sætter du objekt2's pointer til at være
> objekt1's pointer og begge pointere kommer altså til at pege på samme
> fysiske objekt.
>
> Så når du sletter det fysike objekt, bliver begge pointere ugyldige.
>
> Hvis du skal lave en kopi, bliver du nødt til at skabe et nyt objekt af
> samme type og kopiere attributterne over i det nye objekt - det er muligt
at
> delphi har en smart ordning til dette formål, men jeg kender den ikke.
>
>
| |
René Jensen (04-06-2003)
| Kommentar Fra : René Jensen |
Dato : 04-06-03 19:34 |
|
Esben Piltoft wrote:
> Hvis man får brug for at kopierer alt indhold fra et objekt til at
> andet, hvordan gør man så det ??
Hvorfor ønsker du at kopiere et objekt til et andet objekt? -Kan det
ikke løses vha. en friend-klasse eller nedarvning?
Med venlig hilsen,
René Jensen
| |
Esben Piltoft (05-06-2003)
| Kommentar Fra : Esben Piltoft |
Dato : 05-06-03 08:21 |
|
> Hvorfor ønsker du at kopiere et objekt til et andet objekt? -Kan det
> ikke løses vha. en friend-klasse eller nedarvning?
Grunden er simpelthen at det ville være lettere end at flytte alt
indholdet (seperat) over i det objekt hvor det hører til. Der er op
til 80 objekter, der skal sorteres udfra nogle få af de data de
indeholder. Og da jeg gerne vil have at objekt0 altid skal tilhøre en
bestemt adresseområde (fx. 181 byte i en eeprom startende fra 0x13F0
og så fremdeles) vil der opstå situationer hvor en stor del af
objekterne skal rykkes en enkelt plads.
Men overvejer nu at lave et array af byte der kan holde styr på
placeringen af objekterne. Så skal jeg jo også bare flytte x*nogle få
bytes i stedet for x*181 bytes. Selvfølgelig kunne jeg i stedet flytte
de 181 bytes "manuelt", men det er næsten for let ;) og så have jeg
jo været færdig nu .... ;)
Problemet er også at det projekt jeg skriver klassen til ikke er
færdig endnu - og bliver løbende ændret. Kunne jeg kopiere en klasse
ville det minimere de ændringer jeg skulle lave i klassen (og kopi
funktionen) hver gang der bliver ændret på nogle bytes.
Esben
| |
|
|