תכונה של שפת הדלפי שנוספה לפני כמה שנים (דרך חזרה פנימה בדלפי 2005) המכונה "עוזרי הכיתה" נועד לאפשר לך להוסיף פונקציונליות חדשה לכיתה קיימת (או להקלטה) על ידי הצגת שיטות חדשות לכיתה (רשומה).
להלן תוכלו לראות כמה רעיונות נוספים לעוזרי הכיתה + ללמוד מתי ומתי לא להשתמש בעוזרי הכיתה.
עוזר כיתה ל...
במילים פשוטות, עוזר כיתה הוא מבנה המרחיב כיתה על ידי הצגת שיטות חדשות בכיתת העוזרים. עוזר כיתה מאפשר לך להרחיב את הכיתה הקיימת מבלי לשנות אותה בפועל או לרשת אותה.
כדי להרחיב את שיעור ה- TStrings של ה- VCL, היית מצהיר ומיישם עוזר כיתה כמו הבא:
סוג
TStringsHelper = עוזר כיתה ל TStrings. ציבוריפונקציה מכיל (const aString: מחרוזת): בוליאני; סוף;
המחלקה לעיל, הנקראת "TStringsHelper" היא עוזרת כיתה לסוג TStrings. שים לב כי TStrings מוגדרת ב- Classes.pas, יחידה שברירת המחדל זמינה בסעיף השימושים עבור כל אחד מהם דלפי יחידת הטופס, למשל.
הפונקציה שאנחנו מוסיפים לסוג ה- TStrings בעזרת עוזרת הכיתה שלנו היא "מכיל". היישום יכול להיראות כמו:
פונקציה TStringsHelper. מכיל (const aString: מחרוזת): בוליאני; התחל
תוצאה: = -1 <> IndexOf (aString); סוף;
אני בטוח שהשתמשת באמור לעיל פעמים רבות בקוד שלך - כדי לבדוק אם יש לצאצאי TStrings, כמו TStringList, ערך מחרוזת כלשהו באוסף הפריטים שלו.
שים לב, למשל, המאפיין פריטים של א TComboBox או TListBox הוא מסוג TStrings.
לאחר יישום ה- TStringsHelper ותיבת רשימה בטופס (בשם "ListBox1"), כעת תוכל לבדוק אם מחרוזת כלשהי היא חלק מתכונת פריטי התיבה באמצעות:
אם ListBox1.Items. מכיל ('מחרוזת כלשהי') לאחר מכן...
עוזרי הכיתה ללכת ו- NoGo
ליישום עוזרי הכיתה יש השפעות חיוביות וחלקן (אתם עשויים לחשוב) השלכות על קידודכם.
באופן כללי עליך להימנע מהרחבת השיעורים שלך - כאילו אתה צריך להוסיף קצת פונקציונליות חדשה שיעורים מותאמים אישית משלך - הוסף את הדברים החדשים ביישום הכיתה ישירות - לא להשתמש בכיתה עוזר.
לכן עוזרי הכיתה נועדו יותר להאריך כיתה כאשר אינך יכול (או אינך צריך) לסמוך על ירושה כיתתית ויישומי ממשק רגילים.
עוזר כיתה לא יכול להכריז על נתוני מופע, כמו שדות פרטיים חדשים (או מאפיינים שקוראים / כותבים שדות כאלה). הוספת שדות כיתה חדשים מותרת.
עוזר כיתה יכול להוסיף שיטות חדשות (פונקציה, נוהל).
לפני דלפי XE3 ניתן היה להרחיב רק שיעורים ורישומים - סוגים מורכבים. משחרור דלפי XE 3 אתה יכול גם להרחיב סוגים פשוטים כמו מספר שלם או מחרוזת או TDateTime, ולבנות כמו:
var
s: מחרוזת; התחל
s: = 'דלפי עוזרי XE3'; s: = s. UpperCase. הפוך; סוף;
אני אכתוב על Delphi XE 3 עוזר מסוג פשוט בעתיד הקרוב.
איפה עוזרת הכיתה שלי
מגבלה אחת לשימוש בעוזרי הכיתה שעשויה לעזור לך "לירות בעצמך בכף הרגל" היא העובדה שאתה יכול להגדיר ולקשר בין מספר עוזרים לסוג יחיד. עם זאת, רק אפס או עוזר אחד חלים בכל מיקום ספציפי בקוד המקור. העוזר המוגדר בהיקף הקרוב יחול. היקף עוזר הכיתה או הרשומה נקבע כרגיל דלפי אופנה (למשל, מימין לשמאל בסעיף השימושים של היחידה).
משמעות הדבר היא שאפשר להגדיר שני עוזרי כיתת TStringsHelper בשתי יחידות שונות, אך רק אחת תחול בעת השימוש בפועל!
אם עוזר כיתה לא מוגדר ביחידה בה אתה משתמש בשיטות שהוצגו - מה שברוב המקרים יהיה כך, אינך יודע באיזה יישום עוזר כיתה היית משתמש בפועל. לשני עוזרי כיתות ל TStrings, הנקראים אחרת או מתגוררים ביחידות שונות, עשויים להיות יישומים שונים לשיטת "מכיל" בדוגמה לעיל.
להשתמש או לא?
כן, אך שימו לב לתופעות הלוואי האפשריות.
להלן הרחבה שימושית נוספת לעוזר הכיתה TStringsHelper שהוזכר לעיל
TStringsHelper = עוזר כיתה ל TStrings. פרטיפונקציה GetTheObject (const מחרוזת: מחרוזת): סובייקט; תהליך SetTheObject (const מחרוזת: מחרוזת; const ערך: TObject); ציבוריתכונה ObjectFor [const מחרוזת: מחרוזת]: TObject לקרוא GetTheObject לכתוב SetTheObject; סוף;... פונקציה TStringsHelper. GetTheObject (const מחרוזת: מחרוזת): סובייקט; var
idx: מספר שלם; התחל
תוצאה: = אפסי; idx: = IndexOf (aString); אם idx> -1 לאחר מכן תוצאה: = אובייקטים [idx]; סוף; תהליך TStringsHelper. SetTheObject (const מחרוזת: מחרוזת; const ערך: TObject); var
idx: מספר שלם; התחל
idx: = IndexOf (aString); אם idx> -1 לאחר מכן אובייקטים [idx]: = ערך; סוף;
אם היית הוספת אובייקטים לרשימת מחרוזות, אתה יכול לנחש מתי להשתמש בנכס העזר שימושי לעיל.