89. Automatic properties

רוב הProperties שאנחנו כותבים הם Properties שרק עושים אנקפסולציה לField של המחלקה.

למשל, לא אחת כתבנו Properties כאלה:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Person
{
private string m_Name;
public string Name
{
get
{
return m_Name;
}
set
{
m_Name = value;
}
}
}

אחד הFeatureים שנוספו בC# 3.0 הוא Automatic Properties, החוסך לנו ליצור את הField של המחלקה. נוכל, למשל, בדוגמה זו לעשות אותו הדבר בצורה הבאה:

1
2
3
4
5
6
7
8
public class Person
{
public string Name
{
get;
set;
}
}

ראינו בעבר שגם אפשר לתת רמת חשיפה שונה לAccessorים ע"י ציון הmodifier לפני הAccessor. (טיפ מספר 25)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Person
{
private string m_Name;
public string Name
{
get
{
return m_Name;
}
private set
{
m_Name = value;
}
}
}

נוכל להשתמש בזה גם בAutomatic Properties:

1
2
3
4
5
public string Name
{
get;
private set;
}

או למשל

1
2
3
4
5
public string Name
{
get;
protected set;
}

בכל מקרה, זה מאפשר לנו לממש ממשקים עם הרבה Properties יחסית בקלות, ומפשט לנו את הקריאות של הקוד מעט.


הגבלות:

לא נוכל לשים breakpoint בAutomatic Property, מה שיכול לפגוע בדיבוג שלנו. למשל, נוח לשים breakpoint בsetter ולגלות מי משנה לו את הערך לnull למשל.

לא נוכל לשים לוגיקה משלנו באחד מהAccessorים. למשל, אם אנחנו מממשים את INotifyPropertyChanged, לא נוכל להקפיץ את האירוע בשינוי של Property, אלא אם נשתמש בProperty רגיל.

לא נוכל להפוך Automatic Property לreadonly, כלומר לMember שאפשר לאתחל אותו רק בConstructor.

המשך שבוע השלמות טוב

שתף