PROPERTY – GET \ SET
בשיעורים הקודמים למדנו הגדרת מחלקה שממנה
ניתן ליצור מספר מופעים (אובייקטים)
יצירת אובייקט
Person p = new Person();
שימוש במשתנים להשמת ערכים:
p.FirstName = "Lior";
כ"כ למדנו סוגי הרשאות גישה למשתנים
private- מגדיר את המשתנה כפרטי וניתן לגשת אילו רק באותה המחלקה
public– משתנה
ציבורי – ניתן לגשת למשתנה בכל שלב בתוכנית
Property הינו מנגנון המאפשר לממש את עקרון הכימוס
(encapsulation). הרעיון הוא להסתיר את המשתנים
(Data Hiding) ולחשוף אותם דרך
מנגנון סינון ובקרה לצורכי בדיקת תקינות המידע באמצעות הפונקציות getter/setter . כל בקשה לגישה \ שינוי מתבצעת
דרך הפקודות האלו - אין לאפשר למשתמש גישה ישירה למשתנים
·
בכדי
להסתיר את המשתנה יש להגדיר אותו כ- private
ואת ה- Property שמאפשר את הגישה למשתנה יש להגדיר כ- public.
·
בכדי לדעת איזה
פונקציה שייכת לאיזה משתנה מקובל לתת שם זהה לשניהם עם הבדל קטן כמו' לדוג' להתחיל
את שם המשתנה עם _
·
ניתן ליצור properties אוטומטי ע"י כתיבת propfull ולחיצה על TAB פעמיים = יוצר משתנה ומגדיר אותו כ-private ובנוסף יוצר את צמד
הפונקציות ומגדיר אותם כ-public
class Person
{
//Data members:
private string _firstName;
private string _lastName;
private int _id;
//Properties:
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
{
//Data members:
private string _firstName;
private string _lastName;
private int _id;
//Properties:
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
כאשר נכניס ערך לתוך ה- property יופעל החלק של ה - set:
_p.FirstName
= "Lior";
וכאשר נקבל
את הערך מה- property יופעל החלק של ה - get:
string name = _p.FirstName;
כעת ניתן לבצע סינון מידע כדי שלא יכנס מידע
שגוי לאובייקט, לדוגמא נניח ונרצה לאכוף על הערך של id את החובה שלא יכיל יותר מ- 9 ספרות, נעשה זאת כך:
public int Id
{
get { return id; }
set
{
if (value > 999999999 )
throw new Exception (string.Format("Error - {0} is not Right" , value));
{
get { return id; }
set
{
if (value > 999999999 )
throw new Exception (string.Format("Error - {0} is not Right" , value));
}else
id = value;
}
}
id = value;
}
}
·
Value = פקודה שמורה שאומרת
"הערך שנשלח"
·
Throw – הצגת הודעה למשתמש במידה
ויש כשל בהרצה
במידה ולא נרצה
לאפשר את עדכון של שדה נגדיר רק get
כדאי לדעת –לפני שפות OOP לא הייתה פונקציה מובנת אלא 2 פונקציות נפרדות getter \ setter
class example
{
private string _Name;
public string
getName()
{
return _Name;
}
public void setName(string name)
{
_Name = name;
}
}
הקריאה לפונקציה
static void Main(string[] args)
{
example a1 = new example();
a1.setName("dodo");
Console.WriteLine(a1.getName());
היום כשאנחנו יוצרים מאפיינים בקריאה למשתנה הפונקציות מתבצעות לבד
טיפ – ע"מ שהקוד יהיה קריא נכתוב את כל משתני הprivate למעלה ואח"כ את propertys לפני
המאפיים נכתוב
#region NAME
ובסוף
#endregion
וזה ייתן לנו אפשרות לקפל את כל הרשומות
Static
משתנה Static – הוא משתנה של המחלקה –
משתנה רגיל בכל פעם שיוצרים אובייקט נוצר משתנה חדש ומקבל ערך משלו לעומת זאת
משתנה סטטי מוגדר פעם אחת והוא משותף לכל האובייקטים במחלקה (מופיע גם רק פעם אחת
בזיכרון)
במידה ויש ערך מסוים בתוכנית שהוא משותף לכל האוביקטים
נגדיר משתנה סטטי אחד ונקרא לו בכל פעם
ע"מ לקרוא למשתנה סטטי יש לפנות אליו דרך שם המחלקה ולא דרך שם האובייקט כמו שפונים למשתנה רגיל.
מאפין סטטי
באותה שיטה ניתן להגדיר
כל אלמנט שלמדנו עליו בנושא מחלקות כסטטי ע"י הוספת Static בכותרת
המאפיין
דוגמ' למשתנה סטטי בשם מונה + בנאי שבכל יצירה של
אובייקט מבצע עליה למונה ב-1
class room
{
public static int counter;
public room()
{
counter++;
}
במהלך הרצת התוכנית נוכל לפנות למשתנה ולקבל את מספר
האובייקטים שנוצרו
Console.WriteLine(room.counter);
בנאי סטטי
- ניתן ליצור בנאי סטטי שיאתחל את המשתנה בתחילת הרצת התוכנית. ברגע שניצור אוביקט ראשון בתוכנית הבנאי הסטטי ירוץ ויאתחל את המשתנה ולאחמ"כ המערכת עבור לבנאי הרגיל או לברירת המחדל - כשניצור אובייקט נוספת המערכת לא תריץ שוב את הבנאי הסטטי
ביצירת בנאי סטטי לא נדרש לכתוב לפני
את רמת ההרשאה כיוון שנוצר פעם אחת אלא ישירות את הפעולה
static room()
{
room = …. ;
}
אין תגובות:
הוסף רשומת תגובה