![]() |
Static?
Hallo,
gibt es im Delphi Sprachumfang ein Äquivalent zu static in C? Derzeit behelfe ich mir so:
Delphi-Quellcode:
Das find ich in gewisser Weise unschön. Allerdings möchte ich den primitiven "Cache" der hier gebaut wird, ungern ausserhalb der Funktion realisieren. Auch eine globale Variable möchte ich vermeiden. In C könnte ich lastStringTested einfach als static definieren und der Wert dieser Variable bleibt über weitere Aufrufe bestehen. In Delphi scheint diese Möglichkeit nicht zu existieren, oder?
{$WRITEABLECONST ON}
function doSomeTests(stringToTest : WideString) : Boolean; const lastStringTested : WideString = ''; begin Result := TRUE; if WideLowerCase(stringToTest) = WideLowerCase(lastStringTested) then exit; {Was auch immer ich dort teste ...} lastStringTested := stringToTest; end; {$WRITEABLECONST OFF} Um Hinweise auf die Suche zu vermeiden: Ja, das Thema wurde bereits diskutiert, vor einigen Jahren. Nur entwickelt sich Delphi als Sprache ja durchaus weiter. Könnte ja sein, daß static mittlerweile zum Sprachumfang gehört oder aber es mittlerweile eine Möglichkeit gibt, es eleganter zu implementieren, als ich es tat :). |
Re: Static?
Zitat:
Man könnte eine Klasse verwenden, die den Testcode enthält, und auf (strict) private Instanz- oder Klassenvariablen zugreifen kann. Aufruf wäre dann
Delphi-Quellcode:
static class methods werden unter anderem hier beschrieben:
if TStringTest.DoSomeTests(SomeWideString) then ...
New Delphi language features since Delphi 7 ![]() Die Deklaration sollte dann etwa so aussehen:
Delphi-Quellcode:
Vorteile: auf WRITEABLECONST kann man verzichten, durch Verwendung von OOP ist die Testfunktionalität sehr leicht und konsistent erweiterbar, Testklassen können auch einfach ausgetauscht werden (z.B. bei Verwendung des Visitor-Patterns), Vererbung kann benutzt werden.TStringTest = class strict private class var LastStringTested: WideString; public function DoSomeTests(AString: WideString); end; |
Re: Static?
Im Endeffekt würde ich eine globale Variable gegen ein globales, statisches Objekt tauschen. Ich seh da nicht den Vorteil ;).
|
Re: Static?
Zitat:
|
Re: Static?
Wenn man eine class function draus macht, spart man sich das Instanzieren einer Klasse:
Delphi-Quellcode:
Der Aufruf erfordert dann allerdings den Klassentyp:
TStringTest = class
strict private class var LastStringTested: WideString; public class function DoSomeTests(AString: WideString): Boolean; end;
Delphi-Quellcode:
TStringTest.DoSomeTests
|
Re: Static?
Zitat:
Delphi-Quellcode:
Warum hat der Editor hier eigentlich keinen Syntaxchecker ? ;)
if TStringTest.DoSomeTests(SomeWideString)
|
Re: Static?
Link aus einem anderen Thread entnommen:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 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