מדריך C# – תכנות מונחה עצמים: קבועים ( Constants ו- Readonly)
Constants
constants (קבועים) הם תאים בזיכרון אשר מכילים ערך קבוע שאינו ניתן לשינוי (בניגוד למשתנים שמטבעם כן יכולים להשתנות). קבועים ב – NET. למעשה מוגדרים אוטומטית כ- static (אין צורך לציין זאת במפורש), הדבר אומר שהגישה אליהם היא דרך שם המחלקה ולא דרך אובייקט.
הגדרת const:
class MyConst
{
public const double PI = 3.14159;
}
גישה ל – const:
Console.WriteLine(MyConst.PI);
Readonly
readonly (קריאה-בלבד) הינו משתנה קבוע, אשר בניגוד ל- const אינו מוגדר כ- static אלא מוגדר עבור כל אובייקט. זאת אומרת שהערך שלו יכול להיות שונה בכל מופע של האובייקט, אך מרגע שנוצר האובייקט לא ניתן לשנות אותו. ניתן להכניס לתוכו ערך בשורת ההצהרה עליו (כלומר אתחול כמו const) ו / או בבנאי (c'tor) בלבד. לאחר האתחול ובניית המופע של המחלקה לא ניתן עוד לשנות את ערכו של משתנה זה.
להלן דוגמא להגדרת readonly והשמת ערך בבנאי.
שימו לב שהפונקציה ()ChangeValue תגרור שגיאת קומפילציה כי ניתן לבצע השמה רק באתחול או בבנאי:
class TestReadonly
{
//read-only data-member:
private readonly int val;
//read-only Property:
public int Val
{
get { return val; }
}
//Ctor:
public TestReadonly(int v)
{
val = v;
}
//Method:
public void ChangeValue()
{
val = 10; // !שגיאת קומפילציה
}
}
שימו לב שבד"כ למשתנה read-only יהיה property שהוא read-only (כלומר, ללא חלק של set), מיכוון שלא ניתן לשנות את ערך המשתנה לאחר שהוא כבר נוצר ואותחל.
דוגמא לגישה למשתנה readonly – הגישה היא דרך שם האובייקט (בניגוד ל – const). ניתן לשים לב שבכל אובייקט יש ערך אחר למשתנה:
TestReadonly t1 = new TestReadonly(10);
TestReadonly t2 = new TestReadonly(12);
Console.WriteLine(t1.Val);
Console.WriteLine(t2.Val);
תגובות בפייסבוק