الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة خاصة بال Object Orianted

بدأه eng_lrn2b في 1 أغسطس 2011 · 9 رد · 838 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم روحمه الله وبركاته

من المعروف ان ال Class عبارة عن reference type

يعنى انا لما بعرف object من اى كلاس بيكون هذا ال object عبارة عن reference لمكونات الكلاس سواء اذا كانت Data او functions

فا انا كان ليا سوال متعلق بالكود التالى

myclass obj1 =new myclass();
myclass obj2 =obj1;
myclass obj3= obj2;

دلوقتى انا عرفت myclass وعملت منها obj1 اللى هو عبارة عن reference للقيم اللى موجودة داخل الكلاس

وعرفت كمان obj2 وكمان obj3

سوالى بقى هل ال obj2 بيشاور على القيم اللى بيشاور عليها ال obj1

ولا بيشاور على مكان تانى فى الميمورى ولكن بنفس القيم الموجودة داخل ال obj1

جزاكم الله الخير كله

#2

السلام عليكم ورحمه الله وبركاته

اخي في مثالك السابق لقد تم حجز كائن من نوع myclass في منطقة في الذاكرة يطلق عليها Heap واسم الكائن obj1, اما obj2,obj3 ماهما الا كائنان من نوع myclass ولكن لم تحجز لهما منطقة في الذاكرة انما يؤشران على نفس المنطقة الموجود بها الكائن obj1

.:: Wish to become better and better ::.

#3
VB Helper كتب:

السلام عليكم ورحمه الله وبركاته

اخي في مثالك السابق لقد تم حجز كائن من نوع myclass في منطقة في الذاكرة يطلق عليها Heap واسم الكائن obj1, اما obj2,obj3 ماهما الا كائنان من نوع myclass ولكن لم تحجز لهما منطقة في الذاكرة انما يؤشران على نفس المنطقة الموجود بها الكائن obj1

السلام عليكم ورحمه الله وبركاته

جزاك الله كل خير اخى الكريم

وكان لى سوال اخر

مش المفروض ان ال obj1 بيشاور على المكان اللى محجوز فى الذاكرة صح ولا غلط

اى انه يوجد مكانين فى ال Memory

المكان الاول : اسمه obj1 ومحجوز فيه عنوان ال Data اللى موجودة فى الكلاس (اى عنوان المكان الثانى)

المكان الثانى فيه قيمة ال object نفسها اى الداتا اللى موجودة فى الكلاس وايضا ال methods

#4

myclass obj1 =new myclass();

تم حجز منطقة بالذاكرة stack لتخزين عنوان obj1 (بداية يكون غير مهيأ)... و الان عندما وضعنا كلمة new ....تم حجز منطقة في heap لحجز منطقة في الذاكرة تحوي قيمة obj1....عندها سيتم تخزين عنوان هذه المنطقة في obj1 في الذاكرة stack في المنطقة التي تم حجزها مسبقا

myclass obj2 =obj1;

تم حجز منطقة من الذاكرة stack من اجل عنوان obj2 و لكنه غير مهيأ بعنوان (لا يشير الى شيء)..الا بعد ان اسندنا اليه object ....عندها قام بنسخ العنوان من obj1 (نسخ العنوان فقط و ليس قيم obj1) و تخزينه في obj2 في الذاكرة stack....و بذلك اخذ يشير الى نفس المنطقة التي يشير اليها obj1.........

myclass obj3 =obj2;

سيشير obj3 الى نفس منطقة التي يشير اليها obj1 لانه يتم تناسخ العناوين من object الى اخر...

يعني يشير الن نفس قيم obj1

Currently working on ASP.net ..... come Back Soon

#5

السلام عليكم ورحمه الله وبركاته

جزاك الله كل خير اخى الكريم

#6

السلام عليكم ورحمه الله وبركاته

اخي اصلا اي Reference type تكون مرجعه في منطقة يطلق عليها Stack اما البيانات تكون في منطقة اخرى تسمى Heap

تم تعديل هذه المشاركة بواسطة VB Helper في 3 أغسطس 2011 في 15:11

.:: Wish to become better and better ::.

#7

اخي vbHelper ..ماذا تقصد بالبيانات...هل هي قيم ال object ؟؟؟..و اذا كانت كذلك هل هي مخزنة بال stack....

Currently working on ASP.net ..... come Back Soon

#8

السلام عليكم ورحمه الله وبركاته

اخي لقد تم تعديل المشاركة السابقة, العنوان او المرجع يخزن في الـ Stack اما القيم تخزن في الـ Heap

.:: Wish to become better and better ::.

#9

[quote name='eng_lrn2b' date='01/08/2011 - 11:54 PM' timestamp='1312232043' post='1220433

myclass obj1 =new myclass();
myclass obj2 =obj1;
myclass obj3= obj2;

اه. .. سؤالك دا بيدل أنك بتريد تعرف بالضبط شو عم يصي بالذاكرة يعني أنصحك ب و العمليات المنطقية

بس في هذا الكود انت صرحت انه كل كائن بيساوي التاني يعني byval وليس by ref

#10

السلام عليكم و رحمة الله و بركااااتة

انا الي فهمتة من الكود الي حضرتك كتبتة ان myclass obj1 =new myclass();

دي معناها اني استدعنا الconstructor سواء كان default او لو كنت عملالة overload

كأني عملتلة initialization كاني كتبت int x=0; او اي قيمة كدة انا اخدت اوبجيكت من الclass int و اعطيت لة قيمة عشان ما يطلعليش الerror اي هوا unassigned variable

اما بالنسبة لmyclass obj2 =obj1;

كدة انشات اوبجيكت تاني من نفس الكلاس و بيشاور علي نفس الحجات الي بيشاور عليها obj1 و بكدة هياخد الinitialize بتاعة و هكذا بالنسبة للobj3

ياااااريت يا جماعة لو شرحي غلط او فاهمة حاجة غلط او معرفتش اوصل للمراد حد يقولي لاني مش محترفة في السي شارب و الاوبجيكت و لكن دة علي حد علمي .........و جزاكم ربنا كل خييييير :)

مواضيع مشابهة