فهم مساعدي دلفي (وتسجيل)

click fraud protection

تمت إضافة ميزة لغة دلفي منذ بضع سنوات (في طريق العودة في دلفي 2005) تسمى "Class Helpers" مصممة للسماح لك بإضافة وظائف جديدة إلى فصل دراسي موجود (أو سجل) من خلال تقديم طرق جديدة للفصل (سجل).

سترى أدناه بعض الأفكار الإضافية لمساعدي الصف + تعلم متى وأين لا تستخدم مساعدي الفصل.

مساعد الطبقة...

بكلمات بسيطة ، مساعد الفصل هو بناء يمتد إلى الفصل من خلال إدخال طرق جديدة في فئة المساعد. يسمح لك مساعد الفصل الدراسي بتوسيع الفصل الدراسي الحالي دون تعديله أو توريثه بالفعل.

لتمديد فئة TStrings في VCL ، ستعلن وتنفّذ مساعد فئة مثل ما يلي:

اكتب
TStringsHelper = مساعد الطبقة TStrings. عامةوظيفة يحتوي على(مقدار ثابت aString: string): منطقي؛ النهاية; 

الفئة المذكورة أعلاه ، تسمى "TStringsHelper" هي مساعد فئة لنوع TStrings. لاحظ أنه تم تعريف TStrings في Classes.pas ، وهي وحدة متاحة افتراضيًا في بند الاستخدامات لأي منها دلفي وحدة النموذج ، على سبيل المثال.

الوظيفة التي نضيفها إلى نوع TStrings باستخدام مساعد الفصل هي "يحتوي". قد يبدو التنفيذ كما يلي:

وظيفة TStringsHelper. يحتوي على(مقدار ثابت aString: string): منطقي؛ ابدأ
النتيجة: = -1 <> IndexOf (aString) ؛ النهاية; 
instagram viewer

أنا متأكد من أنك استخدمت ما سبق عدة مرات في الكود الخاص بك - للتحقق مما إذا كانت بعض سلالات TStrings ، مثل TStringList ، لديها بعض قيمة السلسلة في مجموعة العناصر الخاصة بها.

لاحظ أن ، على سبيل المثال ، خاصية العناصر أ TComboBox أو TListBox من نوع TStrings.

بعد تنفيذ TStringsHelper ، ومربع قائمة في نموذج (يسمى "ListBox1") ، يمكنك الآن التحقق مما إذا كانت بعض السلاسل جزءًا من خاصية عناصر مربع القائمة باستخدام:

إذا ListBox1.Items. يحتوي على ("بعض السلاسل") ثم... 

مساعدو الصف Go و NoGo

إن تنفيذ مساعدي الصف له بعض التأثيرات الإيجابية وبعض (قد تفكر) في التأثيرات السلبية على التعليمات البرمجية الخاصة بك.

بشكل عام ، يجب أن تتجنب توسيع الفصول الدراسية الخاصة بك - كما لو كنت بحاجة إلى إضافة بعض الوظائف الجديدة إلى فصولك المخصصة - أضف الأشياء الجديدة في تطبيق الفصل مباشرة - لا تستخدم فئة المساعد.

وبالتالي ، فإن مساعدي الفصول الدراسية مصممون بشكل أكبر لتوسيع الفصل الدراسي عندما لا يمكنك (أو لا تحتاج إلى) الاعتماد على الميراث العادي وتنفيذ الوصلات.

لا يمكن لمساعد الصف إعلان بيانات المثيل ، مثل الحقول الخاصة الجديدة (أو الخصائص التي من شأنها قراءة / كتابة هذه الحقول). يسمح بإضافة حقول فئة جديدة.

يمكن أن يضيف مساعد الفصل أساليب جديدة (الوظيفة ، الإجراء).

قبل دلفي XE3 ، كان بإمكانك فقط توسيع الفئات والسجلات - الأنواع المعقدة. من إصدار Delphi XE 3 ، يمكنك أيضًا توسيع أنواع بسيطة مثل عدد صحيح أو سلسلة أو TDateTime ، وإنشاء مثل:

فار
s: سلسلة ابدأ
s: = 'مساعدو Delphi XE3' ؛ ق: = ق. الأحرف الكبيرة. عكس؛ النهاية; 

سأكتب عن مساعد نوع دلفي XE 3 البسيط في المستقبل القريب.

أين مساعد صفّي

أحد قيود استخدام المساعدين في الفصل والتي قد تساعدك على "إطلاق النار على نفسك في القدم" هو حقيقة أنه يمكنك تحديد وربط مساعدين متعددين بنوع واحد. ومع ذلك ، يتم تطبيق صفر أو مساعد واحد فقط في أي مكان محدد في التعليمات البرمجية المصدر. سيتم تطبيق المساعد المحدد في أقرب نطاق. يتم تحديد نطاق مساعد الفصل أو السجل بشكل عادي دلفي الموضة (على سبيل المثال ، من اليمين إلى اليسار في بند استخدامات الوحدة).

هذا يعني أنه يمكنك تحديد اثنين من مساعدي TStringsHelper في وحدتين مختلفتين ولكن سيتم تطبيق واحد فقط عند استخدامه بالفعل!

إذا لم يتم تحديد مساعد الفصل في الوحدة حيث تستخدم الطرق المقدمة - والتي ستكون كذلك في معظم الحالات ، فأنت لا تعرف ما هو تطبيق مساعد الفصل الذي ستستخدمه بالفعل. اثنان من مساعدي الفصل TStrings ، الذين تم تسميتهم بشكل مختلف أو المقيمين في وحدات مختلفة قد يكون لديهم تطبيق مختلف لطريقة "يحتوي" في المثال أعلاه.

استخدم أم لا؟

نعم ، ولكن كن على دراية بالآثار الجانبية المحتملة.

إليك ملحق مفيد آخر لمساعد TStringsHelper المذكور أعلاه


TStringsHelper = مساعد الطبقة TStrings. نشروظيفة GetTheObject (مقدار ثابت سلسلة: خيط): الهدف ؛ إجراء SetTheObject (مقدار ثابت سلسلة: خيط; مقدار ثابت القيمة: TObject) ؛ عامةخاصية ObjectFor [مقدار ثابت سلسلة: خيط]: الهدف اقرأ GetTheObject اكتب SetTheObject ؛ النهاية;... وظيفة TStringsHelper. GetTheObject (مقدار ثابت سلسلة: خيط): الهدف ؛ فار
idx: عدد صحيح ؛ ابدأ
النتيجة: = لا شيء ؛ idx: = IndexOf (aString) ؛ إذا idx> -1 ثم النتيجة: = كائنات [idx]؛ النهاية; إجراء TStringsHelper. SetTheObject (مقدار ثابت سلسلة: خيط; مقدار ثابت القيمة: TObject) ؛ فار
idx: عدد صحيح ؛ ابدأ
idx: = IndexOf (aString) ؛ إذا idx> -1 ثم كائنات [idx]: = القيمة ؛ النهاية; 

إذا كنت إضافة كائنات إلى قائمة السلاسل، يمكنك تخمين متى تستخدم خاصية المساعد مفيد أعلاه.

instagram story viewer