Announcement

Collapse
No announcement yet.

Copy-Konstruktor

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Copy-Konstruktor

    Hallo,

    ich benötige eine Funktion, mit der ich ein neues Object B erzeuge und die Daten von Object A gleich hineinkopieren kann, um dann dieses Objekt in einer Objectliste zu speichern.
    <br><br>
    Bisher habe ich folgendes gemacht:
    <br><br>
    <pre>
    function MyClass.copy: MyClass;
    begin
    result:= MyClass.create;
    result.AttribA:= self.AttribA;
    ...
    end;
    </pre><br>
    Aufgerufen habe ich das dann immer mit<br>
    <pre>
    var Object1: MyClass;
    MyList: TObjectList;
    begin

    MyList:= TObjectList.create;
    Object1:= MyClass.create;

    MyList.Add(Object1.copy);

    ...

    Object1.free;
    MyList.free;
    end;
    </pre>
    Dies hat bisher immer ganz gut geklappt. Aber in einem Fall verliert self nach dem Aufruf von create seine Attributwerte. Kann mir das jemand erklären? Und gibt es einen besseren Weg dies zu bewerkstelligen?

    Danke schon mal,

    Yvonne

  • #2
    Hi Yvonne,
    <br>was meinst du mit "verliert seine Attributwerte"? Folgender Code:
    <pre class="sourcecode"><code>
    <b>type</b>
    MyClass = <b>class</b>
    <b>public</b>
    AttribA: Integer;
    <b>function</b> copy: MyClass;
    <b>end</b>;
    <br>
    <b>function</b> MyClass.copy: MyClass;
    <b>begin</b>
    result := MyClass.create;
    result.AttribA := self.AttribA;
    <b>end</b>;
    <br>
    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>var</b>
    Object1: MyClass;
    MyList: TObjectList;
    <b>begin</b>
    MyList := TObjectList.create;
    Object1 := MyClass.create;
    Object1.AttribA := 666;
    ShowMessage(IntToStr(Object1.AttribA));
    MyList.Add(Object1.copy);
    ShowMessage(IntToStr(Object1.AttribA));
    ShowMessage(IntToStr(MyClass(MyList[0]).AttribA));
    Object1.free;
    MyList.free;
    <b>end</b>;

    </code></pre>
    funktioniert bei mir wie erwartet - 3x "666". O:-)
    <p>Uli

    Comment


    • #3
      Hallo Yvonne,<BR>
      für die Funktionalität deiner Copy-Methode gibt es die Methode Assign. Suche mal in der Hilfe nach TPersistent.Assign. <BR>
      Gruss Thoma

      Comment

      Working...
      X