Getters & Setters

cz560

New member
Getters & Setters

הגישה הנכונה (עד כמה שניתן לקבוע משהו שהוא נכון
, היא לא לאפשר גישה חיצונית למשתני מחלקה, אלא לעשותם private or protected
public class MyClass { private _age; get Age {return _age}; set Age {_age = value}; }​
האם כך עושים זאת ?
 

א נ י ה ו

New member
כן

ואז יש לך גם אפשרות לא לעשות set כדי לא לתת למשתמש חיצוני אפשרות לשנות לך ערכים כך סתם...
 

cz560

New member
הסינטקס שלי נכון ?

יש לי משתנה private שעליו אני רוצה להגן, וב get/set אני בכלל כותב משהו אחר (Age). מה זה ה Age הזה ? משתנה חדש ?
 

yuval k

New member
למה שלא תנסה בעצמך?

ובכן, לא
זה לא יעבוד. אתה צריך להגדיר את זה קצת אחרת:
private myType _age; public myType Age { get { return _age; } set { _age = value; } }​
 

cz560

New member
myType = int למשל ?

כלומר אני מגדיר כאן משתנה חדש לחלוטין, מאותו סוג של המשתנה הפרטי, ועליו אני מגדיר את המילים השמורות set ו get ?
 

yuval k

New member
כן, myType יכול להיות int, למשל.

אתה יכול להציב במקומו כל סוג משתנה שהוא. מה שאתה עושה כאן זה בעצם משהו דמוי פונקציה, שיודע לבד מתי לעשות set ומתי לעשות get. אתה מתאים את הפונקציונליות הרצויה לך לכל אחד מהמקרים. הצורה הפשוטה ביותר היא זו, אבל אין שום מניעה שיהיה לך קוד get ששומר בְּ-log את הפעולה שלך, מחלק את ה-int שאתה שולף (למשל) ב-17 ומעלה בחזקה השלישית - למשל, או כל דבר אחר
 

cz560

New member
Age הוא לא משתנה חדש לחלוטין ?

אני בעצם מגדיר משתנה חדש לגמרי, בשם Age, ומגדיר לו את המיליים השמורות set + get. וכאשר אני אנסה להציב ערך לתוך Age, ע"י Age = 5 אז זה בעצם יוצב לתוך age_ (אם מה שאני עושה בתוך ה set הוא רק הצבה), לא ?
 

cz560

New member
מה הכוונה "דרך" ?

זה לא נכון ? בעצם מגדירים משתנה חדש לכל דבר...
 
אתה חוזר על אותה שאלה

ובכן, לא, Age הולא לא משתנה חדש. אם תסתכל דרך ה-reflection של ה-class תגלה שיש לך שתי פונקציות חדשות:
get_Age() set_Age(MyType value)​
וחוצמזה יוגדר גם Property חדש ל-class בשם Get. זהו לא משתנה חדש כי לא מוקצה עבורו מקום בזכרון.
 

cz560

New member
מצטר שאני לא מבין כמוך...

אחרת לא הייתי חוזר על אותה שאלה...
מה זה reflection ? איך אני מגיע אליו ?
 
למעלה