![]() |
Im with statement obj referenzieren
Tach.
ich stehe vor einer Aufgabe und habe Probleme die richtigen Worte zu finden dazu. Jedenfalls Ausgangslage: Ich benutze eine with Konstruktion, um u.a. Variablennamen einzusparen. Verwende ich für ein Stream. Hier ein fetzen des relevaten Codes:
Delphi-Quellcode:
Was ich nun möchte:
function tForm1.lesen( datei: String; var stream : tStream) : boolean;
var i : int; begin with tFileStream.Create( datei, fmOpenRead) do begin {...} stream.CopyFrom( XXX, i ); {...} free; end; end; Aus dem erstellten tFileStream will ich ne Stelle in stream kopieren. Das Problem: Welche referenz soll ich nutzen? ( Stelle mit XXX markiert ) ein self liefert nur (in diesem Beispiel ) Form1, nicht aber den temporären stream. Kann man das irgendwie mit with trotzdem lösen, oder komm ich um eine weitere Variable nicht herum? Also sowas:
Delphi-Quellcode:
Also dieser Code tut das, was ich auch will.
function tForm1.lesen( datei: String; var stream : tStream) : boolean;
var i : int; t : tStream; begin t := tFileStream.Create( datei, fmOpenRead); {...} stream.CopyFrom( t, i ); {...} t.free; end; Wenn also mit with nicht gehen sollte, dann nehme ich auch den. Nur möcht ich halt wissen, ob es wirklich nicht möglich ist, oder ob doch man was machen kann. Gruss |
Re: Im with statement obj referenzieren
Nein, das geht nicht. Falls doch, würde es mich aber auch interessieren.
|
Re: Im with statement obj referenzieren
Tja, schade eigentlich, dass es nicht geht.
Hab aber auch nicht wirklich erwartet, dass es klappen wird. Dann muss halt ne zusätzliche Variable her. |
Re: Im with statement obj referenzieren
bin ich froh das es nicht geht :-D Ich bin jemand der das Width überhaupt nicht mag weil oft nicht ersichtlich ist ob es innerhalb des blocks um eine Eigenschaft des With-Parameter handelt oder um eine eigenständige Variable. Oft kommt es dort auch zu fehlern.
Bsp.:
Delphi-Quellcode:
procedure TMyComponent.Methode();
begin with AnComponent do begin [...] Name := 'irgendwas'; [...] //teilweise auch schon gesehen Name = AnComponent.Name; [...] end; end; |
Re: Im with statement obj referenzieren
Zitat:
Wenn ich irgendwo im Quellcode (eines Kollegen oder so) auf ein with stosse, wird dies ersatzlos eliminiert. Vor allem hat der Debugger damit ein Problem, weil er die Variablen nicht auflösen kann. Beim "Drüberfahren" zeigt er den Wert der Variablen nicht an. Und das menschlische Auge sieht auch nicht sofort, wo eine Property dazugehört. Geil wird es aber erst, bei mehrfachen oder verschachtelten with. Dann kommt weder der Compiler noch der Debugger noch der Mensch mehr klar. |
Re: Im with statement obj referenzieren
Je nach Mensch natürlich. Ich konnte da bisher gut mitverfolgen, was passiert.
Also würdet ihr alle eh generell von der With-Konstruktion abraten? Dafür lieber eine Variable mehr deklarieren? |
Re: Im with statement obj referenzieren
Ohne with ist es eindeutiger und imho leichter zu sehen zu welcher variable die Eigenschaft/Methode gehört
|
Re: Im with statement obj referenzieren
Ich bin wohl der einzige auf der Welt, der mit 'with' gerne arbeitet.
Statt
Delphi-Quellcode:
dann doch lieber
Foo.Bar.Grumpy.Steve.Bob.Jim.Arm := 1;
Foo.Bar.Grumpy.Steve.Bob.Jim.Leg := 2; Foo.Bar.Grumpy.Steve.Bob.Jim.Head := 3;
Delphi-Quellcode:
Bei Mehrdeutigkeiten lass ich es natürlich sein und verwende für Jim vielleicht eine lokale Variable, aber Konstrukte wie
With Foo.Bar.Grumpy.Steve.Bob.Jim do Begin
Arm := 1; Leg := 2; Head := 3; End;
Delphi-Quellcode:
sind doch echt nett.
With TMyForm.Create (nil) do begin
If ShowModal = mrOk Then DoSomeThing; Release End; Aber es ist egal, ob nun mit 'with' oder nicht. Ihr wollt es übersichtlich und lesbar, ich auch. Und darum geht es letztendlich. |
Re: Im with statement obj referenzieren
Ich liebe with-Statements und benutze sie immer dann, wenn der Source-Code dadurch kürzer wird.
@Sir T. : Für mich wird dadurch der Code übersichtlicher. @RavenIV : Der Compiler kommt damit sehr wohl klar (und ich auch). Lediglich der Debugger hat damit Probleme, aber die nehme ich gern in Kauf. Und was denken die Profis (ich bin ja nur ein AmateurProfi)?: Einfach mal in die Delphi Source Codes schauen. |
Re: Im with statement obj referenzieren
Also ich würd auch sagen "Finger weg" vom with Statement (obwohl ich es früher auch gerne verwendet habe ... es bringt vor allem langfristig NUR Probleme mit sich!!
@alzaimar so ist es viel besser:
Delphi-Quellcode:
Var
jim: TFooObject; Begin jim := Foo.Bar.Grumpy.Steve.Bob.Jim; jim.Arm := 1; jim.Leg := 2; jim.Head := 3; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 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