מדריך C# – תכנות מונחה עצמים: שימוש ב- Properties
Property הינו מנגנון המאפשר לממש את עקרון הכימוס (encapsulation). הרעיון הוא להסתיר את המשתנים ולחשוף אותם דרך מנגנון סינון ובקרה לצורכי בדיקת תקינות המידע. בכדי להסתיר את המשתנה יש להגדיר אותו כ- private ואת ה- Property שמאפשר את הגישה למשתנה יש להגדיר כ- public. ניתן לגשת למשתנה private אך ורק מתוך המחלקה.
נהוג ששם המשתנה יתחיל באות קטנה ושם ה- property יהיה אותו השם, אך יתחיל באות גדולה.
class Person
{
//Data members:
private string firstName;
private string lastName;
private int id;
//Properties:
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
public int Id
{
get { return id; }
set { id = value; }
}
//Methods:
public void Print()
{
Console.WriteLine("Name: {0} {1}", firstName, lastName);
}
}
שימו לב שאין צורך לשנות את הפונקציה Print כי היא נמצאת בתוך המחלקה ולכן יכולה לגשת למשתני ה – private. לעומת זאת הקוד שעובד עם האובייקט חייב להשתנות כי אין לו גישה למשתנים:
Person p = new Person();
p.FirstName = "Lior";
p.LastName = "Zamir";
p.Id = 123456789;
p.Print();
כאשר נכניס ערך לתוך ה- property יופעל החלק של ה – set:
p.FirstName = "Lior";
וכאשר נקבל את הערך מה- property יופעל החלק של ה – get:
string name = p.FirstName;
כעת ניתן לבצע סינון מידע כדי שלא יכנס מידע שגוי לאובייקט, לדוגמא נניח ונרצה לאכוף על הערך של id את החובה שלא יכיל יותר מ- 9 ספרות, נעשה זאת כך:
public int Id
{
get { return id; }
set
{
if (value > 999999999)
return;
id = value;
}
}
הערה:
בשלב זה יש לבצע את הבדיקות ב- property ללא שימוש במנגנון Exception Handling, שילמד בהמשך.
ניתן ליצור גם Property שיכיל רק אחד מהחלקים get, set אם נרצה שלא לאפשר השמה או קבלה של הערך.
לדוגמא readonly property, אשר מאפשר רק לקבל את הערך, אך לא מאפשר לבצע השמה:
public int Id
{
get { return id; }
}
בדוגמא זו אם ננסה לבצע את הפעולה הבאה, נקבל שגיאת קומפילציה:
p.Id = 123456789;
תגובות בפייסבוק