الـ Class Helper هو نوع مساعد يقترن بكلاس أو ريكورد اخر، تستطيع من خلاله اقديم إجراءات أضافية وخصائص غير موجودة في الكلاس أور الركورد المقترن به. الـ Helpers هي طريقة لتوسيع كلاس ما بدون اشتقاقه، هذه الطريقة مفيدة للركوردات التي بطبيعتها لا يمكن الاشتقاق منها.
الصيغة
type
identifierName = class|record helper [(ancestor list)] for TypeIdentifierName
memberList
end;
الـ ancestor list خيارية لا يسمح الـ helper بتعريف instance data لكن يسمح بـ class fields.
أمثلة
type
TMyClass = class
procedure MyProc;
function MyFunc: Integer;
end;
...
procedure TMyClass.MyProc;
var X: Integer;
begin
X := MyFunc;
end;
function TMyClass.MyFunc: Integer;
begin
...
end;
...
type
TMyClassHelper = class helper for TMyClass
procedure HelloWorld;
function MyFunc: Integer;
end;
...
procedure TMyClassHelper.HelloWorld;
begin
Writeln(Self.ClassName); // Self refers to TMyClass type, not TMyClassHelper
end;
function TMyClassHelper.MyFunc: Integer;
begin
...
end;
...
var
X: TMyClass;
begin
X := TMyClass.Create;
X.MyProc; // Calls TMyClass.MyProc
X.HelloWorld; // Calls TMyClassHelper.HelloWorld
X.MyFunc; // Calls TMyClassHelper.MyFunc
ملاحظة تم تنفيد الأجراء MyFunc في المثال السابق لأن الاجراءات في الـ Helper ستحتل مكان الاجراءات في الكلاس المقترن في حال تطابقت اسماء الاجراءات.