הערה
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות להיכנס או לשנות מדריכי כתובות.
הגישה לדף זה מחייבת הרשאה. באפשרותך לנסות לשנות מדריכי כתובות.
הערה
קבוצות עניין של קהילה עברו כעת מ- Yammer Microsoft Viva Engage. כדי להצטרף לקהילת Viva Engage ולהשתתף בדיונים האחרונים, מלא את טופס הגישה לקהילת כספים ופעולות Viva Engage ובחר את הקהילה שאליה ברצונך להצטרף.
מאמר זה מתאר מינוח אירוע ומ מילות מפתח ב- X++.
השתמש בתבנית העיצוב של האירוע כדי להפוך את הקוד שלך למודלרי יותר וניתן לשימוש חוזר. אירוע המונח הוא מטאפורה שמסבירה כיצד משתמשים בנציגים. כאשר מתרחשת פעולה חשובה במהלך הפעלת תוכנית, ייתכן ומודולים אחרים יצטרכו לעבד את המופע. מופעים חשובים אלה ידועים כאירועים. כאשר מתרחש אירוע, התוכנית מודיעה על כך לאירוע שמיידע חייב לשלוח הודעות לגבי האירוע. המידע שולח הודעה לכל המטפלים באירועים שהם מנויים של המידע. כאשר התוכנית מורה למידע שלה לשלוח את ההודעות, תהליך זה מעלה אירוע.
באפשרותך להגדיר נציג בטבלה, בטופס או בשאילתה, ולא רק בכיתה.
הטבלה הבאה מציגה את המונחים המתארים את המטאפורה של האירוע.
| מונח | תיאור |
|---|---|
| אירוע | מופע חשוב במודול תוכנית שבו מודולים נוספים חייבים לעבד את המופע. |
| מיידע (Notifier) | רכיב התוכנית השולח מידע אודות האירוע לכל המטפלים באירועים שנרשמו כמנויים למידע. |
| מנוי | התוכנית פועלות או שיטות שנרשמו כמנויות לקבלת הודעה על אירוע. |
| מטפל באירועים | השיטות שנרשמו כמנויות למידע על אירוע. רק השיטות המתאימות יכולות להיות מטפלים באירועים. |
מילות מפתח המשמשות לתיכנות המשתמש בנציגים
הטבלה הבאה מציגה את מילות המפתח המתארות את השימוש בנציגים.
| מילת מפתח או מונח | קוד | תיאור |
|---|---|---|
| מצביע לפעולת שירות | delegate myDelegate(str information) {} |
הקוד מראה כיצד נראה הנציג בעורך הקוד. מאחר שסוג ההחזרה אינו חוקי תמיד, הוא אינו מוזכר בתחביר. לא ניתן להשתמש בקוד בתוך בסוגריים מסולסלים ({}). |
| מטפל באירועים | myClassInstance.myDelegate += eventHandler(otherClass.myInstanceMethod); |
אף על פי שהתחביר של מילת המפתח eventHandler עשוי לתת את הרושם ש- eventHandler היא פונקציית X++, היא אינה פונקציה. מילת המפתח eventHandler מציינת למהדר ששיטה נרשמת כמנוי לנציג. |
| הרשמה כמנוי או הוספת שיטה לנציג | myClassInstance.myDelegate += eventHandler(OtherClass::aStaticMethod); |
בקוד, השיטה הסטטית OtherClass::aStaticMethod נרשמת כמנוי לנציג. |
| התקשרות לנציג | myClassInstance.myDelegate("Hello"); |
קריאה זו לנציג תבקש מהנציג להתקשר לכל שיטה שנרשמת כמנוי לנציג. השיטות שאתה מנוי אליהן נקראות באותו סדר שבו הן נוספו לנציג. יש להשלים שיטה אחת שאתה מנוי אליה לפני שהנציג מתקשר לשיטה הבאה. |
דוגמה
דוגמת הקוד הבאה מדגימה כיצד להגדיר אירוע, להירשם כמנוי לאירוע ולהגדיר אירוע באמצעות שתי כיתות. המחלקה PointWithEvent מגדירה נציג שהועבר. שיטת ההעברות קוראת לנציג שהועבר, אשר מודיע על אובייקטים שנרשמים כמנויים לאירוע. המחלקה PointKeeper מגדירה את פעולת השירות writeMove ומקצה אותה כמטפל באירועים עבור הנציג שהועבר של מופע Point שנוצר בפעולת השירות createAndMove.
class PointWithEvent
{
// Instance fields.
real x;
real y;
// Constructor to initialize fields x and y.
void new(real _x, real _y)
{
x = _x;
y = _y;
}
void move(real x_offset, real y_offset)
{
x += x_offset;
y += y_offset;
this.moved(abs(x_offset) + abs(y_offset));
}
delegate void moved(real distance)
{
}
}
class PointKeeper
{
public void createAndMove()
{
PointWithEvent point = new PointWithEvent(1.0, 2.0);
point.moved += eventhandler(this.writeMove);
point.move(4.0, 5.0);
// Output is "9.0".
}
public void writeMove(real distance)
{
info(any2Str(distance));
}
}
מטפלים באירועים ושיטות קדם-פרסום
ב- X++מדור קודם, ניתן לרשום במטה-נתונים ששיטות מסוימות מבצעות לפני ואחרי הביצוע של פעולת שירות. המפרסם תעד את המידע אודות השיחות שנרשמו כמנוי, דבר שאינו שימושי בסביבה. כעת באפשרותך לספק מטפלים מראש ופוסט באמצעות קוד על-ידי מתן התכונה SubscribesTo למנויים.
דוגמה לשיטות מוקדמות ושיטות פרסום
[PreHandlerFor(classStr(MyClass2), methodstr(MyClass2, publisher))]
public static void PreHandler(XppPrePostArgs arguments)
{
int arg = arguments.getArg("i");
}
[PostHandlerFor(classStr(MyClass2), methodstr(MyClass2, publisher))]
public static void PostHandler(XppPrePostArgs arguments)
{
int arg = arguments.getArg("i");
int retvalFromMethod = arguments.getReturnValue();
}
public int Publisher(int i)
{
return 1;
}
דוגמה זו מציגה שיטת פרסום בשם Publisher. שני מנויים רשומים באמצעות התכונות PreHandlerFor ו- PostHandlerFor. הקוד מראה כיצד לגשת למשתנים ולערכים המוחזרים.
תכונה זו מסופקת לצורך תאימות לאחור, ומשום שקוד היישום אינו כולל נציגים רבים, כדי לפרסם אירועי יישום חשובים. מטפלים מוקדמים ומטפלים בפוסט יכולים להיתקלות בקלות כתוצאה מפרמטרים שנוספו או הוסרו, מסוגי פרמטרים שהשתנו או מכיוון ששיטות אינן נקראות עוד או נקראות בנסיבות שונות. תכונות משמשות גם לאיגוד מטפלים באירועים לנציגים:
[SubscribesTo(
classstr(FMRentalCheckoutProcessor),
delegatestr(FMRentalCheckoutProcessor, RentalTransactionAboutTobeFinalizedEvent))]
public static void RentalFinalizedEventHandler(
FMRental rentalrecord, Struct rentalConfirmation)
{
}
delegate void RentalTransactionAboutTobeFinalizedEvent(
FMRental fmrentalrecord, struct RentalConfirmation)
{
}
במקרה זה, התכונה SubscribesTo מציינת שיש לקרוא לפעולת השירות RentalFinalizedEventHandler כאשר מתבצעת קריאה לנציג FmRentalCheckoutProcessor.RentalTransactionAboutToBeFinalizedEvent. מאחר שהאיגוד בין המפרסם למנויים מתבצע באמצעות תכונות, לא ניתן לציין את הרצף שבו מתבצעת קריאה למנויים.