3.7.2019

PROPERTY + STATIC




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; }
    }



כאשר נכניס ערך לתוך ה- 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));

   }else            
        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 = ….  ;
        }




אין תגובות:

הוסף רשומת תגובה

MVC

Web api Front end (צד משתמש) שולח http request     כל אתר מכל מכשיר יכול להתחבר ולקבל נתונים (אין אפליקציה) ולא משנה באיזו שפה ה...