C# 4.0 Part 3 - Behind The Scenes Part 1
שני הפוסטים הקודמים עסקו בהבנה איזה שימוש אפשר לעשות עם ה - dynamic.
הראשון היה הדגמה פשוטה של היכולות בעוד
השני הדגים את הדוגמא הפופולרית (שכולם כותבים אבל אף אחד לא מדגים) בכל המאמרים על C# 4.0 התוכנית GetCalculator.
כעת ננסה להבין מה מתרחש מאחורי הקלעים.
למעשה ההבנה מה מתרחש מאחורי הקלעים, מתחלקת לשניים
הראשון - מה קורה כשעושים השמה לתוך dynamic.
השני - מה קורה כשמפעילים מתודות או ניגשים למאפיינים של אותו dynamic.
הפוסט הזה יעסוק בשאלה הראשונה, הפוסט הבא יתחיל לענות על השאלה השנייה.
אז לפני הכל - השאלה שנשאלת, האם באמת קיים טיפוס חדש בשם dynamic ?
והתשובה היא לא, אין חיה כזאת ב - runtime שנקראת dynamic, מפתיע לא ?
שימו לב לקוד הבא:
int i = 10;
object o = new object();
dynamic i1 = i;
dynamic o1 = o;
שימו לב לקוד שמתרנדר מאחורי הקלעים:
int i = 10;
object o = new object();
object i1 = i;
object o1 = o;
לא מאמינים ? שימו לב לקוד ה - IL.
יש כאן תהליך boxing רגיל שעובר על כל משתנה מסוג int כששמים אותו ל - object.
שימו לב לקוד הבא:
static dynamic DynamicDemo(dynamic d1)
{
return null;
}
הנה התוצאה אחרי קומפילציה:
[return: Dynamic]
private static object DynamicDemo([Dynamic] object d1)
{
return null;
}
לסיכומו (החלקי) של עניין, אין טיפוס בשם dynamic, יש רק object, ו - attributes שאומר ל - CLR, שכאן צריך לחזור ולהתקבל אובייקט דינמי.
השאלה היותר מסקרנת, מה קורה כשמנסים להפעיל פעולות על ה - dynamic, וכמו שראינו זה בסך הכול object, ועל כך בפוסט הבא (שיהיה בעזרת ה' מחר.)