239. ExpandoObject

בהמשך למה שראינו פעם שעברה, קיים מימוש נחמד בFramework שלIDynamicMetaObjectProvider.

המימוש הנחמד נקרא ExpandoObject – זהו אובייקט שכפי שמרמז שמו, ניתן להרחבה.

איך משתמשים בזה? ככה:

1
2
3
4
5
6
7
8
ExpandoObject expando = new ExpandoObject();
dynamic dynamicExpando = expando;
dynamicExpando.Age = 32;
dynamicExpando.LastName = "Bond";
dynamicExpando.NickName = "James Bond";
dynamicExpando.Job = "Spy";
Console.WriteLine(dynamicExpando.Age); // 32
Console.WriteLine(dynamicExpando.NickName); // James Bond

הקוד הזה מתקמפל ועובד!

מה קורה כאן?

כל פעם שאנחנו ניגשים לSetter של Property, נוצר לאותו Property איזשהו Storage מאחורי הקלעים.

איך זה עובד?

תכלס הדבר הזה ממומש באמצעות Dictionary של שמות שלProperties לערכים שלהם. באופן ממש לא מפתיע, הוא גם מממש IDictionary<string, object>, כך שאנחנו יכולים לרוץ על ערכי הExpandoObject:

1
2
3
4
5
6
7
8
9
10
11
foreach (KeyValuePair<string,object> propertyNameToValue in expando)
{
Console.WriteLine("Property {0}: {1}",
propertyNameToValue.Key,
propertyNameToValue.Value);
}
//Property Age : 32
//Property LastName : Bond
//Property NickName : James Bond
//Property Job : Spy

מגניב, אה?

המשך יום דינאמי טוב!

שתף