אין חובת iformation hiding ב c# ?

asico

New member
אין חובת iformation hiding ב c# ?

כתבתי תוכנית דוגמה ב - Console Application, ולהפתעתי, דרך ה- main יכולתי לגשת ישירות אל השדות המוגדרים כ- private של אובייקט מסויים (שנוצר ב- main כמובן). איך ייתכן הדבר?
class Peson { privte int age; ... } void main(...) { Person p=new Person(); p.age=7; Console.Writeln(p.age); }​
 
../images/Emo124.gifבהחלט יש

הקוד שלך לא ברור (לאיזה Class שייכת המתודה main ?), בכל מקרה, זה בלתי אפשרי, וברור מדוע :
using System; namespace ConsoleApplication1 { class Class1 { class Person { private int age; } static void Main(string[] args) { Person me = new Person(); // this can't be done //me.age } } }​
וגם זה לא :
using System; namespace ConsoleApplication1 { class Person { private int age; } class Class1 { static void Main(string[] args) { Person me = new Person(); // this can't be done //me.age } } }​
זה דווקא כן :
using System; namespace ConsoleApplication1 { class Class1 { private int age; static void Main(string[] args) { Class1 me = new Class1(); // this CAN be done me.age = 4; } } }​
בקיצור, שים לב האם המתודה שייכת לאותו הקלאס שבו מוגדר משתנה הPrivate.
 

asico

New member
כתבתי בדיוק כמו הדוגמה הראשונה..

והכל מתקמפל ורץ!!
 

asico

New member
הנה הקובץ:

using System; namespace ConsoleApplication1 { class Class1 { private int num; [STAThread] static void Main(string[] args) { Class1 c1=new Class1(); c1.num=10; Console.WriteLine(c1.num); } } }​
 

gilad g

New member
התנהגות נורמלית לגמרי.

בגלל ש-Main שייכת ל-Class1, יש לה נגישות לכל המשתנים הפרטיים שלה, כולל num.
 

asico

New member
רק רגע -

אם Main נמצאת בתוך מחלקה, אז יש לה נגישות לכל משתני ה private שלה? אם כן, אז באמת אין בעיה. המסקנה שלי היא: תמיד לשים את ה- Main בתוך מחלקה נפרדת.. תודה לכולם על התשובות..
 

gilad g

New member
לאיזו מחלקה שייכת המתודה main?

אין דבר כזה מתודה חסרת מחלקה.
 
למעלה