På min arbejdsplads sidder vi 8 Delphi-udviklere, og til trods for det, er der ikke andet end en enkelt eller to (ud over mig), der for alvor har taget class/record helpers i brug. Personligt forstår jeg det ikke, fordi det er sådan et fantastisk værktøj, men som med alt muligt andet skal man også være opmærksom på "don't overdo a good thing", som man siger på engelsk.
Grund ideen bag class helpers er at tilføje nye metoder til en klasse uden at skulle nedarve fra den. Et meget godt eksempel er TStrings klassen, som danner ramme for en del ting: Lines på en TMemo, Items på en TlistBox og TComboBox samt en masse andet.
TStrings' Add-metode tillader kun en string som parameter, hvilket så betyder man selv skal konvertere til en string, hvis man derudover ønsker at tilføje noget andet, fx en integer eller en boolean.
Det kan man implementere vha. en class helper:
unit TStringsHelperU; interface uses Classes; type TStringsHelper = class helper for TStrings public function Add(const V: Variant): Integer; overload; function Add(const Args: array of Variant): Integer; overload; end; implementation uses Variants; function TStringsHelper.Add(const Args: array of Variant): Integer; var Tmp: string; I: Integer; V: Variant; begin Tmp := ''; for V in Args do Tmp := Tmp + VarToStr(V); Result := Add(Tmp); end; function TStringsHelper.Add(const V: Variant): Integer; begin Result := Add([V]); end; end.
Brugen af en class helper er næsten 100% transparent. Det eneste man som programmør skal gøre er, at tilføje den unit man har implementeret sin class helper i, og så ellers bare bruge den:
with Memo1.Lines do
begin Add('Delphi på dansk'); Add(2011); Add(true); Add([1, ' linje med blandet indhold: ', 1, #32, true]); Add(['π ~', PI]); Add(['Det ', 21, '. bogstav i det græske alfabet er φ' ]); end;
Resultatet ses her:
Jens Borrisholt
Ingen kommentarer:
Send en kommentar