mistrovstvi v delphi 6 cz - 284
P ovšimněte si konstatování: T S t r i n g s je abstraktní třída. Znamená to, že fakticky neimplementuje žádný kód vyžadovaný k manipulaci s řetězci. Metody, které její potomci mu sí obsahovat, pouze deklaruje. Skutečná implementace metod pro manipulaci s řetězci je j iž zcela v kompetenci odvozené třídy. A bychom nechodili kolem horké kaše, uvedme si několik příkladů komponent a jejich v lastností typu TStrings: TListBox. Items, TMemo. Lines nebo TComboBox. Items. Všechny z de uvedené vlastností jsou typu TStrings. Asi vás b u d e zajímat, jak lze metody těchto v lastností volat, přestože dosud nebyly v kódu implementovány. To je dobrá otázka! O dpověď zní, že přestože je každá ze zmíněných vlastností definována jako TStrings, je p roměnná, na niž se příslušná vlastnost odkazuje (například Tf i stBox. FI tems), vytvořena j ako odvozená třída. Pro vysvětlení uvedme, že proměnná FItems je soukromou datovou s ložkou vlastnosti Items třídy TListBox: TCustomListBox = classíTWinControl) p riváte F Items: TStrings; Poznámka: P řestože jsme v předchozím přikladu jako typ třídy použili TCustomListBox, je třída TListBox odvozena přímo od třídy TCustomLi stBox ještě ve stejné jednotce. Proto má pří stup i k jejím soukromým složkám. J ednotka StdCtrls.pas, jež je součástí knihovny Delphi VCL, definuje odvozenou třídu T ListBoxStrings, která je potomkem třídy TStrings. Výpis 9.1 obsahuje její definici. Výpis 9.1: Deklarace třídy T L Í s tBoxStrings T ListBoxStrings = c lass(TStrings)
priváte
L istBox: TCustomListBox;
p rotected
p roceduře P utdndex:
I nteger; const S:
s t r i n g ) ; override;
f unction G etdndex: I nteger): s t r i n g ; o v e r r i d e ; f unction GetCount: Integer; o v e r r i d e ; f unction G etObjectíIndex: I nteger): TObject; override; p roceduře P utObjectíIndex: I nteger; AObject: TObject); o v e r r i d e ; p roceduře S etUpdateStateOJpdating: B oolean); o v e r r i d e ;
p ubli c
f u n c t i o n Add(const S: s t r i n g ) : I n t e g e r ; o v e r r i d e ; p roceduře C lear; o v e r r i d e ; p roceduře Del ete(Index: I n t e g e r ) ; o v e r r i d e ; p roceduře E xchange!Indexl, I ndex2: Integer); o v e r r i d e ; f unction I ndexOftconst S : s t r i n g ) : Integer; o v e r r i d e ; p roceduře Insertdndex: Integer; const S: s t r i n g ) ; o v e r r i d e ; p roceduře MoveíCurlndex, Newlndex: I nteger); o v e r r i d e ; e nd;
- Pro možnost psaní komentářů se přihlašte nebo zaregistrujte.


































































