A DELPHI nyelv egyik jellemzője néhány évvel ezelőtt (Vissza a Delphi 2005-ben), az úgynevezett "osztályú segítők" úgy van kialakítva, hogy új funkciókat adjon hozzá egy meglévő osztályhoz (vagy rekordhoz) új módszerek bevezetésével az osztályhoz (rekord).

Az alábbiakban több ötletet látunk az osztály segítők számára; Ismerje meg, mikor és mikor nem használja az osztály segítőket.

Osztály segítő ...

     . Az osztály segítő lehetővé teszi, hogy kiterjessze a meglévő osztályt anélkül, hogy ténylegesen módosítaná, vagy örökölné tőle.   A VCL-nek a TCS-osztály kiterjesztésére szolgálna, és egy osztályos segítőt kell végrehajtania, mint a következők:     Típus  TStringShelper    Osztály segítő  tStrings  nyilvános 

funkció

tartalmaz (

CONST
 asztrálás: string): Boolean;  vége ;    A fenti osztály, az úgynevezett "TstringsHelper" egy osztály segítő a TRastring típushoz. Note that TStrings is defined in the Classes.pas, a unit that is by default available in the uses clause for any Delphi form's unit, for example.The function were adding to the TStrings type using Az osztályunk segítőnk az   tartalmaz   A megvalósítás:     

TStringShelper.contains (

CONST

asztráló: string): Boolean;

kezdődik

Eredmény: -1 lt; gt; IndexOf(aString);
end;Im certain youve used the above many times in your code - to check if some TStrings descendant, like TStringList, has some string value in its Items collection.Note that, for example, the Items property of a TComboBox or a TListBox is of the TStrings type.

Having the TStringsHelper implemented, and A lista mező egy űrlapon (NAMED , LISTBOX1 ), most ellenőrizheti, hogy egy bizonyos karakterlánc a List Box elemek részét képezi, ha:

Listbox1.Items.Contains ( , néhány sztring )

Ezután

...

Osztálybeli segítői mennek és Nogo

   Az osztályozó segítőinek végrehajtása pozitív és néhány (úgy gondolja, hogy a negatív hatások a kódolása.   Általában Kerülje el a saját osztályai kiterjesztését - mintha új funkcionalitást kell hozzáadnia a saját egyéni osztályaihoz - adja hozzá az új dolgokat az osztályfejlesztéshez közvetlenül - nem használ egy osztályos segítőt.   Az osztály segítők többek Úgy tervezték, hogy egy osztályt meghosszabbítsák, ha nem (vagy nem kell) a normál osztályú öröklésre és az interfész implementációra támaszkodhat.   Egy osztály segítő nem tudja kijelenteni a példányadatokat, mint például az új magánterületeket (vagy olyan tulajdonságokat, amelyek olvasni / írnék ilyen területek). Adding new class fields is allowed.

A class helper can add new methods (function, procedure).

Before Delphi XE3 you could only extend classes and records - complex types. A DELPHI XE 3 kiadásból az egyszerű típusokat is kiterjesztheti, mint az egész szám vagy a karakterlánc vagy a tdatetime, és konstrukciója, mint:

VaL

s: string;

kezdődik S: Delphi XE3 Helpers ;; S: s.uppercase.Reverse; vége ; A közeljövőben a Delphi XE 3 egyszerű típusú segítőjét írja. Ahol az én osztályom segítője Egy korlátozás az olyan osztályú segítőinek használatára, amelyek segíthetnek abban, hogy "lődd meg magad a lábfejben", az a tény, hogy többszöröseket lehet meghatározni és társítani segítők egyetlen típusú. Azonban csak nulla vagy egy segítője érvényes a forráskód bármely meghatározott helyén. A legközelebbi hatályban meghatározott segítő alkalmazandó. Az osztály vagy a rekord segítő hatókörét a normál Delphi divat határozza meg (például jobbra, hogy balra a készülék felhasználási záradékában). Ez azt jelenti, hogy két TStringshelper osztályú segítőt definiálhat két különböző egységben, de csak az egyiket alkalmazzan ténylegesen használt!

Ha egy osztályos segítőt nem határoz meg az egységben, ahol a bevezetett módszereket használja -, amely a legtöbb esetben így lesz, akkor nem tudod, hogy melyik osztályú segítő megvalósítás, amit ténylegesen használnának. Két osztályú segítő a TRIGTS-hez, amely másképp nevezett vagy különböző egységekben lakik, lehet, hogy különböző végrehajtás a tartalmaz Módszer a fenti példában.

Használja vagy sem?

Igen, de tudatában kell lennie a lehetséges mellékhatásokkal

Itt egy másik praktikus kiterjesztése a fent említett TStringshelper osztályú segítőnek
   Tstringshelper    Osztály segítő  tStrings  magánszemély    funkció  Gettheobject ( CONST  asztrálás:  string ): TobeCt;  Eljárás  Settheobject ( CONFT  asztrálás:  string ;  CONST  érték: tobect);  Nyilvános   ingatlan  objektum [  CONSTRING  ASTRING:  STRING ]: TOBJECT  Olvasás  Gettheobject  írás  Setthobject;  Vége ; ...  Funkció  TStringsHelper.gettheobject ( CONST  Asztring:  String ): Tobect;    var  IDX: egész szám;  kezdődik  Eredmény:   nulla; idx:   Indexof (asztring); , ha  IDX  gt; -1  Ezután  eredmény:   Objektumok [IDX];  vége ;  Eljárás  TStringShelper.setthebject ( CONST  asztrálás:  string ;  CONST  érték: Tobect);  VaL  IDX: egész szám;  kezdődik  IDX:   Indexof (asztring); , ha  IDX  gt; -1  Ezután  objektumok [IDX]:   Value;end
;

If you've been adding objects to a string list, you can guess when to use the above handy helper property.