Class Helper 💡

1 Minutes May 9, 2023 179 Words

الـ 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 ستحتل مكان الاجراءات في الكلاس المقترن في حال تطابقت اسماء الاجراءات.