クラスのメンバーの内容をスワップするには?

解決


2310  2004-01-16 20:57:59  No: 6768  IP: 192.*.*.*

変数の内容のスワップは普通にできますが、

クラスのメンバーの内容をスワップするには
どうすればよいのでしょうか?

必要な部分のみですが、

コードは大体下記のようになっています。


----------------------------------------------
type
  TData = class
protected
  FField: Integer;
end;


procedure TForm1.FormCreate(Sender: TObject);
var 
  Data: array[0..1] of TData;
begin
  Data := TData.Create;
  TClass.swap;
  Data.Destroy;
end;


procedure TClass.swap;
var
  Temp: TData;
begin
  Temp := TData.Create;

  Temp.FField := Data[0].FField;

  Data[0].FField := Data[1].FField;
  Data[1].FField := Temp.FField;

  Temp.Destroy;
end;
-------------------------------------------

クラス型はアドレスを示してるだけなので(?)、
上記のコードではうまくいかないですよね。

参照先のアドレスが変わっているだけで、
つまりは上書きされてしまっているので。
(順を追って考えると混乱してきた(^^;)

値をスワップするにはどのようにしたらいいでしょうか?

よろしくお願いします。

編集 削除
jok  2004-01-16 21:04:27  No: 6769  IP: 192.*.*.*

FormCreate の内容も TClass.swap も意味不明です。
TClass クラスには swap などというメソッドが定義されていませんよ?

> 値をスワップするにはどのようにしたらいいでしょうか?

なにと何を swap させるのですか? Data[] はローカル変数になってるし。

編集 削除
jok  2004-01-16 21:11:24  No: 6770  IP: 192.*.*.*

こんなことですか?

type
TData = class
protected
  FField: Integer;
end;

var
  Data: array[0..1] of TData;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Data[0] := TData.Create;
  Data[0].FField := 1010;

  Data[1] := TData.Create;
  Data[1].FField := 1111;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Temp:integer;
begin
  // FField の swap
  Temp := Data[0].FField;
  Data[0].FField := Data[1].FField;
  Data[1].FField := Temp;

  // 表示
  Label1.Caption := IntToStr(Data[0].FField);
  Label2.Caption := IntToStr(Data[1].FField);
end;

編集 削除
jok  2004-01-16 21:13:05  No: 6771  IP: 192.*.*.*

追加です。

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Data[0].Free;
  Data[1].Free;
end;

編集 削除
2310  2004-01-16 21:46:20  No: 6772  IP: 192.*.*.*

すいません。
かなり省略してしまったので…。

わかりました!
クラスのフィールド、たとえば、integer型のフィールドなら、
普通にinteger型で宣言された変数に代入すればいいんですよね。
なにも同じクラス型じゃなくても。

ありがとうございました!!

編集 削除