333. Object initializer alternative - mimicing with

Syntax של Object Initializer שהוצג בC# 3.0 הוא מאוד נוח ומאפשר לאתחל אובייקט בצורה יותר ברורה מקודם. (ראו גם טיפ מספר 87, 88)

הבעיה היא שאפשר להשתמש בו רק במקרה שאנחנו מאתחלים אובייקט דרך Constructor – אם אנחנו מאתחלים אובייקט בצורה אחרת, למשל איזשהו Factory, לא נוכל להשתמש בSyntax כזה לאתחול האובייקט.

אפשר כמובן להתווכח אם עד כמה זה נכון לעשות משהו כזה, אבל נראה לי שזה צורך יחסית נפוץ.

מה שאנחנו יכולים לעשות זה משהו כזה:

1
2
3
4
5
6
IPerson person = Factory.CreateInstance<IPerson>();
{
var p = person;
p.Name = "Arik Einstein";
p.Age = 73;
}

שימו לב שהמשתנה p הוא משתנה שנמצא בתוך Scope פנימי, ולכן אנחנו יכולים לעשות מספר אתחולים כאלה:

1
2
3
4
5
6
7
8
9
10
11
12
13
IPerson person = Factory.CreateInstance<IPerson>();
{
var p = person;
p.Name = "Arik Einstein";
p.Age = 73;
}
IPerson person2 = Factory.CreateInstance<IPerson>();
{
var p = person;
p.Name = "Shalom Hanoch";
p.Age = 65;
}

הפעולה הזאת מחקה קצת את הKeyword ששמו With מVB, למי שמכיר.

המשך יום מאותחל לטובה.

שתף