Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "with"-variable? (https://www.delphipraxis.net/79604-variable.html)

xZise 25. Okt 2006 10:46


"with"-variable?
 
Ich habe folgenden Code:
Delphi-Quellcode:
  with TfrmSettings.Create(nil) do
    try
      ShowModal(nil);
    finally
      FreeAndNil(???);
    end;
Was muss anstelle der ??? hin? Also ich möchte die oben erstellte Varible free'n und nil'n...? Ist es "self"?
Also "self" ist es nicht:
Zitat:

[Error] BBCodePlugin.dpr(32): Undeclared identifier: 'self'

Gollum 25. Okt 2006 10:50

Re: "with"-variable?
 
Hallo,

da geht nur Free!
Da du keine Variable benutzt, kannst Du auch nichts auf nil setzen.

xZise 25. Okt 2006 10:55

Re: "with"-variable?
 
Achso ;) Ist ja auch irgendwie logisch :D
Aber was wäre jetzt wenn ich die Variable doch bräuchte? Also z.B. für Showmessage o.ä.?

r2c2 25. Okt 2006 11:04

Re: "with"-variable?
 
Zitat:

Zitat von xZise
Aber was wäre jetzt wenn ich die Variable doch bräuchte? Also z.B. für Showmessage o.ä.?

Dann musst du auf with verzichten:
Delphi-Quellcode:
var
  Objekt: TKlasse;
begin
  Objekt := TKlasse.Create;
  try
    Objekt.Eigenschaft := Wert;
  finally
    FreeAndNil(Objekt);
    // oder in dem Fall reicht auch Free
    Objekt.Free;
  end;
Zumal with sowieso n komisches Konstrukt is...

mfg

Christian

Jürgen Thomas 25. Okt 2006 11:07

Re: "with"-variable?
 
Zitat:

Zitat von xZise
Achso ;) Ist ja auch irgendwie logisch :D
Aber was wäre jetzt wenn ich die Variable doch bräuchte? Also z.B. für Showmessage o.ä.?

In dem Fall musst Du ohne FreeAndNil oder ohne with-Konstrukt arbeiten, z.B.:
Delphi-Quellcode:
var stg: TfrmSettings;
// usw.
stg = TfrmSettings.Create(nil);
try
  stg.ShowModal;
finally
  FreeAndNil(stg);
end;
Gruß Jürgen

[/edit]ohne rote Karte...

mkinzler 25. Okt 2006 11:11

Re: "with"-variable?
 
Oder du kombinierst die beiden Möglichkeiten:
Delphi-Quellcode:
var
  Objekt: TKlasse;
begin
  Objekt := TKlasse.Create;
  with Objekt do
  ...
  end;

xZise 25. Okt 2006 11:23

Re: "with"-variable?
 
Zitat:

Zitat von mkinzler
Oder du kombinierst die beiden Möglichkeiten:

Ich benutzte aber with eigentlich nur, um mir eine lokale Varibale zu speichern. Meißt eben, wenn ich Inis habe o.ä.

Abe danke @ all ;)

Elvis 25. Okt 2006 11:50

Re: "with"-variable?
 
Wofür zum Geier brauchst du FreeAndNil wenn du gar keine greifbare Referenz hast, die nach dem Free auf einen ouchy banana-Bereich zeigt?
Lass mich raten: Pawlow? Du siehst Create und denkst gleich an "FreeAndNil" weil dir irgendwann irgendjemand gesagt hat es sein besser, right?
Ich benutze fast nie FreeAndNil, schlicht und ergreifend weil ich hauptsächlich Dinge freigebe, die danach eh aus'm Scope flutschen oder im "Destruktor". ;)

btw: Es ist aber immer ein guter Tip nicht "with" zu benutzen. "with" in Delphi ist einfach zu diffus.

Luckie 25. Okt 2006 11:55

Re: "with"-variable?
 
Ich benutze auch immer FreeAndNil. Habe ich mir angewöhnt, damit, wenn man doch mal mit Assigned prüfen muss, nicht auf die Fresse fällt.

Elvis 25. Okt 2006 11:59

Re: "with"-variable?
 
Zitat:

Zitat von Luckie
Ich benutze auch immer FreeAndNil. Habe ich mir angewöhnt, damit, wenn man doch mal mit Assigned prüfen muss, nicht auf die Fresse fällt.

Ja, genau dafür isses da. Falls man danach noch eine Referenz hat, die überhaupt prüfbar wäre.
Das ist hier nicht der Fall.
Genauso wenig wie es in einem Destruktor der Fall ist, oder am Ende einer Methode. ;)

Luckie 25. Okt 2006 12:00

Re: "with"-variable?
 
Eben, und damit ich es in solchen Fällen nicht vergesse benutze ich es eben immer. Was ist so schlimm daran?

Elvis 25. Okt 2006 12:07

Re: "with"-variable?
 
Zitat:

Zitat von Luckie
Eben, und damit ich es in solchen Fällen nicht vergesse benutze ich es eben immer. Was ist so schlimm daran?

Gar nix, aber mich hat nur dieses Pawlow'sche Create->FreeAndNil des OP vom Hocker gehauen. :shock:
Obwohl es absolut logisch sein sollte warum FreeAndNil hier gar nicht nötig gewesen wäre. ;)

xZise 25. Okt 2006 13:03

Re: "with"-variable?
 
Zitat:

Zitat von Elvis
Wofür zum Geier brauchst du FreeAndNil wenn du gar keine greifbare Referenz hast, die nach dem Free auf einen ouchy banana-Bereich zeigt?

Siehe: FreeAndNil

Zitat:

Zitat von Elvis
Lass mich raten: Pawlow? Du siehst Create und denkst gleich an "FreeAndNil" weil dir irgendwann irgendjemand gesagt hat es sein besser, right?

Not right!
Ich habe immer:
Delphi-Quellcode:
x.Create;
try

finally
  x.Free;
end;
Nur in diesem einen Fall, wurde im Beispiel "FreeAndNil" verwendet. Ist es tödlich das zu benutzen? Sicher nicht....

Zitat:

Zitat von Elvis
Ich benutze fast nie FreeAndNil, schlicht und ergreifend weil ich hauptsächlich Dinge freigebe, die danach eh aus'm Scope flutschen oder im "Destruktor". ;)

Ich auch nicht? Und naund... Dann ist da eben ein kleines FreeAndNil...

Zitat:

Zitat von Elvis
btw: Es ist aber immer ein guter Tip nicht "with" zu benutzen. "with" in Delphi ist einfach zu diffus.

Also ich benutzte with eh nur noch selten.
Meißtens eben um kurz mal auf eine Ini-Datei zuzugreifen, ohne erst eine lokale Variable zu deklarieren.

Zitat:

Zitat von Elvis
Gar nix, aber mich hat nur dieses Pawlow'sche Create->FreeAndNil des OP vom Hocker gehauen. :shock:

Darf ich hinzufügen, dass ich es aus einem anderen Quelltextteil transferiert habe, und ich benutzte da auch "with" wenn es nur dieser Befehl ist...

Aber eigentlich ist alles ab den 8. Beitrag OT, da 1. das Thema gelöst ist und 2. es jedem überlassen ist, wenn er "FreeAndNil" und "with" nimmt. Ich finde teilweise solche "Styleguide" sachen schrecklich :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz