
הטקסט המלא של הדקות הראשונות בהרצאה «Generics - חלק 5» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
דבר הבא שהוא מאוד נפוץ בעולם הג'נריקס זה דלגייטים ג'נריים שנמצאים כחלק מהתשתית של דוטנט. כאן אנחנו נכנסים לתחום של דלגייטס ואיבנטס שהייתם כבר אמורים לסגור במודול האובג'קט אוריינטד ואנחנו רוצים לראות אילו מחלקות ג'נריק או ליתר דיוק דלגייטס ג'נריים קיימים בתחום הזה.
בואו נבנה פרויקט חדש ג'נריק דלגייטס. בגלל שהתחום הזה הוא יחסית יותר מורכב בואו נבנה את זה בהדרגה. נניח שקיימת לנו פה איזושהי פונקציה בואו ניקח static void נקרא לפונקציה הזאת f1 והיא מקבלת int x ואנחנו רוצים להצמיד על הפונקציה הזאת איזשהו delegate נניח שנדפיס פה f1 אז אנחנו יכולים ללכת ולבנות
delegate נקרא לו del ואנחנו רוצים שיהיה לו איזשהו int נניח value אם הפעם אנחנו פותחים אובייקט delegate function בואו נקרא לו אפילו f1 ונכניס לתוכו את f1 אנחנו יכולים בעזרת הדלגייט הזה לקרוא לפונקציה בואו נריץ ונראה שיש לנו קריאה לפונקציה בעזרת אובייקט דלגייט שמצביע עליה.
אני בעצם פה עושה איזושהי תזכורת מהירה לגבי דלגייטס. אוקיי, אבל מה קורה אם יש לנו את F2 ו-F2 מקבלת סטרינג? נניח שאנחנו F2 כרגע, אז אנחנו כבר לא יכולים להצביע על F2 בעזרת אובייקט דל.
בואו נסתכל על דל, F2 שווה ל-F2 ונראה שהאדיטור אומר לנו רגע רגע יש לכם פה בעיה הפונקציה F2 מקבלת סטרינג הדלגייט דל בנוי על אינטג'ר אנחנו יודעים שדלגייט מסוגל להצביע רק על פונקציות שנבנו באותה החתימה של הדלגייט אז אנחנו רואים פה שיש פה איזושהי בעיה מה אנחנו יכולים לעשות אנחנו יכולים ללכת ולבנות עוד דלגייט שהפעם
הוא מקבל סטרינג אבל בואו נקרא לו כרגע דל שתיים נשתמש עם דל שתיים ונראה שעכשיו הכל בסדר F2 מסוגלת לקרוא לפונקציה F2 בואו נריץ ונראה שזה עובד כמו שצריך אבל רגע כל הדברים האלה מאוד מאוד דומים אנחנו רואים שגם דל וגם דל שתיים בייסיקלי הם מחזירים ווייד ומצביעים על פונקציה אבל הפעם הפונקציה הראשונה מקבלת אינט והפונקציה השנייה מקבלת סטרינג
מאוד דומה מה שונה פה רק הטיפוס הזה האם אנחנו יכולים לבנות במקום זה איזשהו דלגייט שפשוט מאוד בנוי כג'נרי נניח t אם אנחנו בונים את זה אנחנו לא צריכים עכשיו ללכת ולבנות כמה דלגייטים שמצביעים על פונקציות שונות שמה ששונה בהם זה הטיפוס נתונים של הפרמטר האחד והיחיד שיש להם אלא פשוט מאוד להגדיר אותו כt בואו
ניפטר מזה נלך לדלגייט הראשון נגדיר שזה אינטג'ר לדלגייט השני נגדיר שהוא סטרינג ועל ידי דלגייט אחד ויחיד אנחנו יכולים להצביע על מגוון של פונקציות, ליתר דיוק אין סוף פונקציות שיכולות לקבל רק פרמטר אחד מכל סוג שהוא.
בואו נריץ את זה ונראה שהכל עובד כמו שצריך. זאת אומרת, אנחנו יכולים עכשיו לבנות כל פונקציה בעולם, בואו ניקח פה את F3, שמקבלת איזשהו אובייקט מוזר מטיפוס phone.
תם המצאתי כרגע איזושהי מחלקה, phone, והפונקציה הזאת היא F3, בואו נדפיס פה F3, ואנחנו יכולים להציב עליה delegate, כאשר אנחנו פשוט נגדיר שהוא phone, בואו נקרא ל-F3, ונשלח לה רק איזשהו אובייקט פורם שלא עושה שום דבר.
רגע, בואו נריץ ונראה שאין שום בעיה, הכל עובד כמו שצריך. הצלחנו להצביע על כל פונקציה בעולם שמקבלת רק משתנה אחד ויחיד בעזרת הדלגייט הג'נרי הזה שאני כרגע המצאתי.
רגע, אבל מה קורה אם יש לנו את f4 שמקבלת int x וסטרינג s, בואו נקרא לפונקציה הזאת f4 ונגיד שהיא מדפיסה את המחרוזת f4. האם אנחנו יכולים להצביע גם עליה עם הדל הזה?
והתשובה היא כמובן לא, מפני שדל מקבל טיפוס צ'נרי אחד ויחיד, והוא בנוי בצורה כזאת ככזה שמסוגל להצביע רק על פונקציה שמקבלת משתנה אחד ויחיד ומחזירה ווייד.
מי אמר שאנחנו לא יכולים לבצע העמסה של Del כזאת שמקבלת T1 ו-T2? הנה T1 Val1 והנה T2 Val2. בואו נסתכל עכשיו מה קורה כאשר אנחנו פותחים Del.
פתאום אנחנו רואים שהטיפוס נתונים Del שמתאר דלגייט כלשהו יש לו בעצם שני גרסאות, אחת שמקבלת T ומחזירה ווייד, שמקבלת t1 וt2 ומחזירה void אז אנחנו יכולים עכשיו לבנות int ו-string בואו ניקח את f4 ונצביע איתו על f4 ואז נוכל לקרוא לפונקציה הזאת וכמובן לשלוח איזשהו אינטג'ר ואיזושהי string בואו נריץ ונראה שזה עובד כמו שצריך עכשיו יש לנו פתאום
דלגייט שמסוגל להצביע על כל פונקציה בעולם שמחזירה ווייד ומקבלת שני משתנים כלשהם. מה היה קורה אם היינו בונים עוד גרסה ל-T3 והיינו בונים עוד גרסה ל-T4 וכולי וכולי וכולי.
עכשיו אנחנו פתאום רואים שאנחנו מצליחים לבנות את דל וזה דלגייט מאוד מאוד ורסטילי שמסוגל להצביע על כל מיני פונקציות. מה שמשותף לכל הפונקציות האלה ושכולן מחזירות void ומקבלות עד ארבע פרמטרים.
זאת אומרת אם די עכשיו אנחנו יכולים להצביע על כל הדברים האלה אז שימו לב מה קיים לנו בדוט נפ אנחנו לא צריכים להתעסק עם הדבר הזה כי זה מאוד מאוד בסיסי בואו נשים את זה בהערה בואו נשים את כל הסיפור הזה בהערה ויש דלגייט כזה מוכן והוא נקרא אקשן.
אקשן ודלגייט שיכול להצביע על כל פונקציה שמחזירה ווייד ומקבלת שימו לב עד 16 פרמטרים