בהמשך לפעם הקודמת:
ראינו שאם אנחנו מעבירים פרמטרים דינאמיים לפונקציה, מתבצע חיפוש של הOverload המתאים ביותר לפונקציה שלנו.
מה שמפתיע הוא שיש גם התחשבות בטיפוסים הסטטיים המשתתפים בקריאה לפונקציה:
נמשיך עם הדוגמה של פעם שעברה:
יש לנו את הפונקציות הבאות:
|
|
להן נוסיף את הOverloadים הבאים:
|
|
מה יקרה כאשר נריץ את השורה הבאות?
|
|
מה שאולי טבעי לחשוב זה שנכנס לOverload של
|
|
שהרי שלחנו את הTriangle בתור פרמטר דינאמי.
ובכן, דווקא נכנס לOverload של
|
|
למה? שלחנו אמנם את firstShape בתור פרמטר דינאמי, אבל את secondShape שלחנו בתור Shape רגיל. הקומפיילר כותב קוד שמחפש בזמן ריצה את הפונקציה המתאימה ביותר עם הדרישות הבאות:
השם שלה הוא InscribeInShape. הפרמטר הראשון שלה צריך להיות מסוגל להתמודד עם הטיפוס של firstShape (כלומר להיות Triangle ומטה) והפרמטר השני שלה צריך להיות Shape ומטה.
מה שקורה כאן בעצם זה מאחר והעברנו את secondShape בתור טיפוס סטטי, הקומפיילר כותב קוד שמחפש פונקציה שיכולה לקבל את הטיפוס הסטטי הנ"ל (ולא "מגדיל ראש" ומשתמש בטיפוס הקונקרטי של secondShape)
איך אפשר לפתור? כמו שראינו בפעם הקודמת, אם נעביר את שני האובייקטים באופן דינאמי למתודה, תהיה התחשבות בטיפוסים שלהם בזמן ריצה.
שיהיה המשך יום דינאמי טוב