AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse als parameter übergeben Const, Var, ...

Ein Thema von norwegen60 · begonnen am 3. Feb 2023 · letzter Beitrag vom 7. Feb 2023
 
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Klasse als parameter übergeben Const, Var, ...

  Alt 3. Feb 2023, 10:36
Hallo zusammen,

bisher wurde in einer Anwednung, die ich betreue folgendes verwendet
Delphi-Quellcode:
function LoadFromDB(iID:Integer):TMyClass;
begin
  Result := TMyClass.Create;
  ...
  Result.ID = dbQuery.FieldByName('ID').AsInteger;
  ...
end;

function GetMyClass(iID:Integer):TMyClass
begin
  Result := nil;
  for i:= 0 to MyClassList.Count-1 do
  begin
    if MyClassList[i].ID = iID then
    begin
      Result := MyClassList[i];
      break;
    end;
  end;

  if Result = nil then
  begin
    Result := LoadFromDB(iId);
    if Result <> nil then
      MyClassList.Add(Result);
  end;
end;
Das heißt die Klasse wurde in der Function erstellt und als Result zurück gegeben. Das funktioniert so weit auch fehlerfrei auch wenn es unschön ist, dass die Klasse "fremderzeugt" wird.

Ich möchte jetzt aber z.B. ein Refresh einbauen und muss damit der LoadFromDB sagen, dass die Klasse schon existiert und diese auch übergeben.
Mein Konstrukt sähe also eher so aus

Delphi-Quellcode:
function LoadFromDB(aMyClasse:TMyClass; iID:Integer):Boolean; // oder besser LoadFromDB(var/const aMyClasse:TMyClass; iID:Integer) ????????
begin
  ... SQL um Datensatz zu finden
  Result := not sql.IsEmpty;
  ...
  aMyClasse.ID = dbQuery.FieldByName('ID').AsInteger;
  ...
end;

function GetMyClass(iID:Integer; bRefresh:Boolean):TMyClass
begin
  Result := nil;
  for i:= 0 to MyClassList.Count-1 do
  begin
    if MyClassList[i].ID = iID then
    begin
      Result := MyClassList[i];
      break;
    end;
  end;

  if (Result = nil) or bRefresh then
  begin
    bNew := False;
    if Result := nil then
    begin
      Result := TMyClass.Create;
      bNew := True;
    end;

    if not LoadFromDB(Result, iId) then // Wenn nichts gefunden wieder Free
      FreeAndNil(Result);

    if bNew and (Result <> nil) then
      MyClassList.Add(Result);
  end;
end;
Zwei Fragen:
  • Gibt es ein grundsätzliches Strukturproblem bei dem neuen Aufbau
  • Wie unterscheidet sich bei einer Klasse ob ich die Klasse als Var, Const oder ohne Zusatz in der Parameterliste übergebe

Ich habe mal irgendwo gefunden, wie sich das unterscheidet, finde es aber leider nicht mehr. Bei Variablen ist es klar, aber bei dem Pointer??
Ich meine es war so was wie
  • Var MyClass könnte auch in LoadFromDB erstellt werden wenn NIL rein gegeben wird
  • Const MyClass muss schon erstellt sein
  • und ohne Zusatz?
Grüße
Gerd

Geändert von norwegen60 ( 3. Feb 2023 um 10:41 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz