Announcement

Collapse
No announcement yet.

Record mit Class-Typ als Funktionsergebnis

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

  • Record mit Class-Typ als Funktionsergebnis

    Hallo,

    Ich habe folgende Situation:<br>
    type<br>
    TRecord = class<br>
    I : Integer;<br>
    S : string[50];<br>
    end;

    Wie kann ich diesen Typ als Funktionsergebnis erhalten ?

    function Test( A:Integer ) : TRecord;<br>
    begin<br>
    end;<br>

    Ist hier TRecord.Create o.a. notwendig ?

    <b>Ein anderes Beispiel:</b>

    function Test2 : TStringList;

    Wo und wann erfolgt VarName := TStringList.Create;<br>
    Wo und wann erfolgt VarName.Free ?<br>
    Innerhalb oder ausserhalb der Function ?<br>
    Wie erfolgt die Zuweisung innerhalb der Funktion ?

    Gruss
    Helmut

  • #2
    Hallo Helmut,

    da Du TRecord als Klasse definierst mußt Du auch ein Objekt dieser Klasse mit Create erzeugen.
    Um ein Objekt der Klasse als Funktionsergebnis zu erhalten, mußt Du die Funktion wie oben ( function Test( A:Integer ) : TRecord; ) definieren.

    Zu Deiner zweiten Funktion:

    Wo und wann erfolgt VarName := TStringList.Create; Wie erfolgt die Zuweisung innerhalb der Funktion ?

    -> Innerhalb der Funktion; mit Result := TStringList.Create;

    Wo und wann erfolgt VarName.Free ? Innerhalb oder ausserhalb der Function ?

    - > Macht nur außerhalb der Funktion Sinn, da die Funktion als Rückgabe Nil zurückliefert, sofern das Objekt mit FreeAndNil freigegeben wurde.

    Wir benutzen eine Funktion die ein Objekt zurückliefert immer für TQueries.

    Bsp:
    <br>
    Function TCustomAS400.DoCreateQuery: TQuery;<br>
    Begin<br>
    Result := TQuery.Create ( Self ) ;<br>
    With Result Do<br>
    Begin<br>
    DatabaseName := FDB.DatabaseName;<br>
    SessionName := FDB.SessionName;<br>
    Unidirectional := True;<br>
    End;<br>
    End;<br>

    Der Aufruf erfolgt dann so:

    Procedure Test;<br>
    <br>
    Var fQuery : Tquery;<br>
    <br>
    Begin<br>
    fQuery := DoCreateQuery;<br>
    // Hier etwas machen<br>
    FreeAndNil ( fQuery );<br>
    end;<br>

    Ich hoffe ich habe Dir Deine Fragen beantwortet.

    Ciao Torste

    Comment


    • #3
      Hallo Torsten,

      Vielen Dank für die rasche Hilfe!

      Gruss Helmu

      Comment

      Working...
      X