תכנות מונחה עצמים (OOP) - קבועים ותכונות לקריאה בלבד - Constants And Readonly

סגור באמצעות טופס זה תוכלו לספר ולהמליץ לחבריכם..
שם השולח:
כתובת דוא"ל של השולח:
שם המקבל:
שלח לכתובת דוא"ל:
הוסף הערה:
לעיתים נרצה להשתמש במידע שאין לשנותו, כגון: הקבוע המתמטי PI, מספר זיהוי, תאריך לידה, שם ונתיב של קובץ מידע, קובץ הגדרות האפליקציה וכו'. #C מתירה להשתמש בחברי מחלקה קבועים ( Constants Data Members) וחברי מחלקה לקריאה בלבד (Read only Data Members).

Constants And Readonly

 
מאת: ארז קלר

הורדת דוגמאות הקוד

לעיתים נרצה להשתמש במידע שאין לשנותו, ערכו של הקבוע המתמטי PI  ידוע כבר כמה
מאות (ויש שיגידו אלפי שנים),PI מייצגת את היחס הקבוע בין היקף המעגל לקוטרו.
במחלקה Circle, לדוגמה, ניעזר בקבוע זה על מנת לחשב את שטחו של המעגל או את היקפו.
במחלקה Person, לדוגמה, נגדיר שדה המייצג את מספר הזהות של אדם.
מספר הזהות של אדם מלווה אותו מרגע הולדתו ועד ליום מותו, מספר זה אמנם חייב להיות שונה מאדם לאדם, אולם הוא קבוע.
יש הבדל בין שתי הדוגמאות הללו:
בדוגמה הראשונה PI הוא קבוע שערכו משותף לכל האובייקטים מהמחלקה Circle .
בדוגמה השנייה, מספר הזהות הוא קבוע ברמת האובייקט בלבד.
#C מתירה להשתמש בחברי מחלקה קבועים (Constants Data Members) וחברי מחלקה לקריאה בלבד (Read only Data Members).
הקבועים הם ברמת המחלקה, דהיינו, הם תמיד יהיו סטטיים (Static const).
משתני מחלקה לקריאה בלבד הם קבועים ברמת האובייקט, דהיינו, כל אובייקט יכול להכיל ערכים שונים לאותה התכונה.
הגדרת קבוע (const data member)
תכונה המוגדרת כקבועה (Const Data Members) מוגדרת באמצעות המילה השמורה const.
קבוע חייב להיות מאותחל במעמד הגדרתו, דהיינו, הקומפיילר דורש לקבוע ערך על מנת לעבור קומפילציה בהצלחה. מרגע שאותחל, לא ניתן לשנותו עוד.
תכונה המוגדרת כ-Const היא תמיד סטאטית ולכן נוצרת ומאותחלת בזמן טעינת התוכנית.
תחביר:

class ClassName

{

            . . .

            private const double PI = 3.14f;                    . . .      

}


דוגמת קוד (ConstSample):
 1  : class Circle 
 2  : { 
 3  :     public int x; 
 4  :     public int y; 
 5  :     public int radius; 
 6  :     public const double PI = 3.1415; 
 7  :     public static int counter; 
 8  :     public Circle(int x, int y, int radius) 
 9  :     { 
 10 :         this.x = x; 
 11 :         this.y = y; 
 12 :         this.radius = radius; 
 13 :         Circle.counter++; 
 14 :     } 
 15 :     public void Perimeter() 
 16 :     { 
 17 :         Console.WriteLine("Perimeter = {0}", 2 * this.radius * Circle.PI); 
 18 :     } 
 19 :     public void Print() 
 20 :     { 
 21 :         Console.WriteLine("X={0}, Y={1}, Radius {2}, Counter={3}", x, y, radius, Circle.counter); 
 22 :     } 
 23 : } 

בשורה 6 התכונה PI הוגדרה בקבועה באמצעות המילה השמורה const ואותחלה במעמד הגדרתה.


הגדרת תכונה לקריאה בלבד (read-only data member)
קבועים יכולים להיות לעזר רב, אולם אין בהם די.
אשר מדובר על קבוע מתמטי, אין עם כך שום בעיה, אולם כיצד נהפוך שדה המייצג מספר זיהוי של אדם לקבוע?

הרי בעת הקומפילציה אין אנו יודעים כמה אובייקטים נייצר, ובטח שאין אנו יודעים, במעמד הקומפילציה, את מספרי הזיהוי של כל האנשים שיירשמו במערכת המידע שלנו וכמובן שמספר זהות הוא אישי ולכן הוא לא יכול להיות static (ו- const הוא תמיד static) ולכן שדות כגון אלו נגדיר כ- readonly.
Readonly Data member  ניתנים לאתחול פעם אחת בלבד, ב-Ctor של המחלקה, ומאותה נקודה והילך הם אינם ניתנים עוד לשינוי.
Readonly Data Members מגדירים באמצעות במילה השמורה readonly :
תכונות אלו ניתנות לאתחול פעם אחת בלבד בבנאי של המחלקה, מאותה נקודה והילך ערכיה אינם ניתנים עוד לשינוי.
תחביר:
class Sample
{
            . . .
            private readonly  int  id;                                              
            . . .                  
}

דוגמת קוד (ReadOnlySample):
 1  : public class Person 
 2  : { 
 3  :     private readonly int id; 
 4  :     private string firstName; 
 5  :     private string lastName; 
 6  :     public Person(string first, string last, int id) 
 7  :     { 
 8  :         this.firstName = first; 
 9  :         this.lastName = last; 
 10 :         this.id = id; 
 11 :     } 
 12 :     public void Print() 
 13 :     { 
 14 :         Console.WriteLine("Name:{0}{1}", lastName, firstName); 
 15 :         Console.WriteLine("ID : {0}", id); 
 16 :     } 
 17 : } 
בשורה 3 מוגדרת התוכנה id כתכונה לקריאה בלבד (Readonly).
בשורה 10 - היא מאותחלת ומרגע זה לא ניתן לשנותו.




 



כל הזכויות שמורות למחבר ©