وفي هذا الدرس إن شاء الله سنوضح : 1- تعريف المتغير كقيمة(by value) أو كمرجع (by reference) . 2- إمرار المتغير في الmethod كقيمة (pass-by-value) أو كمرجع (pass-by-reference) . والآن بسم الله نبدأ : 1- تعريف المتغير كقيمة(by value) أو كمرجع (by reference) . المتغير المعرف كقيمة (by value) يحتوي على بيانات من النوع المعرف به وتملك قيمة واحدة فقط ، مثلا ً : C# int x = 5 ; والأنواع التي تعرف بها هذا النوع من المتغيرات هي : - الأنواع الغير كسرية (صحيحة) : sbyte , byte , char , short , ushort , int , uint , long . - الأنواع الكسرية : float , double . - وهناك النوعان : decimal , bool . أما المتغير المعرف كمرجع (by reference) يحتوي على عنوان الموقع في الذاكرة للمتغير الذي عُـرّف به ، وعادة ً يشير إلى object (سنتوسع به في دروس لاحقة إن شاء الله ) C# Ref int x ; لكن ال object بشكل موجز ( لسهولة المقارنة ) : هو عبارة عن متغير يحتوي على عدد من المتغيرات ، وكل واحدة من هذه المتغيرات تمتلك قيمة . وأكثر هذه المتغيرات تعرّف بالأنواع التالية : string , object ، إلى أنه يمكن استخدام أي نوع آخر . ويمكن للمبرمج أيضا ً إنشاء متغير من نوع reference عن طريق بناء ما تسمى class (والتي أيضا ً سنتوسع بها في دروس لاحقة إن شاء الله ) . والجدول التالي يعرض قائمة من الأنواع المستخدمة في تعريف المتغيرات وقيم كل واحدة وحجمها : 2- إمرار المتغير في الmethod كقيمة (pass-by-value) أو كمرجع (pass-by-reference) . لإستدعاء المتغير في ال method طريقتين : 1- كقيمة(pass-by-value) : وفي هذه الحالة يتم أخذ نسخة من قيمة المتغير ، حيث أن التغيرات التي تحدث على هذه القيمة لا تؤثر على قيمة المتغير الأصلية . وهذا يمنع بعض التأثيرات الجانبية التي يمكن أن تؤثر على صحة عمل البرنامج . 2- أو كمرجع (pass-by-reference) . وفي هذه الحالة أي تأثير على قيمة المتغير داخل ال method تتأثر قيمة المتغيرالأصلية ، وهذا ما يساعد على التقليل من ثقل نسخ البيانات من داخل المتغيرات خاصة إذا كانت من نوع object ، إلا ّ أنه يضعف الأمن على قيمة المتغير الأصلي . ملاحظة : هناك كلمة محجوزة وهي out فهي by reference أيضا ً إلا أنه عند تعريف متغير في method المتغير المستــَـلـَـم لا يشترط أن يحمل قيمة ، أي يمكن أن يحمل قيمة إن لم يكن نستطيع أن نضع له قيمة افتراضية داخل ال method ، وسيتضح المعنى أكثر مع البرنامج . والآن سنقوم بكتابة برنامج لتتوضح لك الصورة . الهدف الرئيسي في هذا البرنامج ملاحظة أثر ال Square Method أي مربع العدد عند استدعائه by value أو by reference . والآن : يحتوي البرنامج على ثلاثة (methods) لحساب مربع عدد صحيح : الأول :
وفي هذا الدرس إن شاء الله سنوضح : 1- تعريف المتغير كقيمة(by value) أو كمرجع (by reference) . 2- إمرار المتغير في الmethod كقيمة (pass-by-value) أو كمرجع (pass-by-reference) . والآن بسم الله نبدأ : 1- تعريف المتغير كقيمة(by value) أو كمرجع (by reference) . المتغير المعرف كقيمة (by value) يحتوي على بيانات من النوع المعرف به وتملك قيمة واحدة فقط ، مثلا ً :
int x = 5 ;
والأنواع التي تعرف بها هذا النوع من المتغيرات هي : - الأنواع الغير كسرية (صحيحة) : sbyte , byte , char , short , ushort , int , uint , long . - الأنواع الكسرية : float , double . - وهناك النوعان : decimal , bool . أما المتغير المعرف كمرجع (by reference) يحتوي على عنوان الموقع في الذاكرة للمتغير الذي عُـرّف به ، وعادة ً يشير إلى object (سنتوسع به في دروس لاحقة إن شاء الله )
Ref int x ;
لكن ال object بشكل موجز ( لسهولة المقارنة ) : هو عبارة عن متغير يحتوي على عدد من المتغيرات ، وكل واحدة من هذه المتغيرات تمتلك قيمة . وأكثر هذه المتغيرات تعرّف بالأنواع التالية : string , object ، إلى أنه يمكن استخدام أي نوع آخر . ويمكن للمبرمج أيضا ً إنشاء متغير من نوع reference عن طريق بناء ما تسمى class (والتي أيضا ً سنتوسع بها في دروس لاحقة إن شاء الله ) . والجدول التالي يعرض قائمة من الأنواع المستخدمة في تعريف المتغيرات وقيم كل واحدة وحجمها :
2- إمرار المتغير في الmethod كقيمة (pass-by-value) أو كمرجع (pass-by-reference) . لإستدعاء المتغير في ال method طريقتين : 1- كقيمة(pass-by-value) : وفي هذه الحالة يتم أخذ نسخة من قيمة المتغير ، حيث أن التغيرات التي تحدث على هذه القيمة لا تؤثر على قيمة المتغير الأصلية . وهذا يمنع بعض التأثيرات الجانبية التي يمكن أن تؤثر على صحة عمل البرنامج . 2- أو كمرجع (pass-by-reference) . وفي هذه الحالة أي تأثير على قيمة المتغير داخل ال method تتأثر قيمة المتغيرالأصلية ، وهذا ما يساعد على التقليل من ثقل نسخ البيانات من داخل المتغيرات خاصة إذا كانت من نوع object ، إلا ّ أنه يضعف الأمن على قيمة المتغير الأصلي . ملاحظة : هناك كلمة محجوزة وهي out فهي by reference أيضا ً إلا أنه عند تعريف متغير في method المتغير المستــَـلـَـم لا يشترط أن يحمل قيمة ، أي يمكن أن يحمل قيمة إن لم يكن نستطيع أن نضع له قيمة افتراضية داخل ال method ، وسيتضح المعنى أكثر مع البرنامج . والآن سنقوم بكتابة برنامج لتتوضح لك الصورة . الهدف الرئيسي في هذا البرنامج ملاحظة أثر ال Square Method أي مربع العدد عند استدعائه by value أو by reference . والآن : يحتوي البرنامج على ثلاثة (methods) لحساب مربع عدد صحيح : الأول :
SquareRef( Ref int x) { x = x * x ; }
أي أنه سيتعامل مع القيمة المبعوثة إليه بعنوانها ، فمثلا ً لو بعثنا له 5 فسيقوم يحفظ عنوان القيمة 5 ومن ثم يربع القيمة ويعيدها إلى نفس العنوان . فإذا طبعنا قيمة x سيكون الناتج 25 لأنه قد أخذ مكانه فلو استدعينا ال method مرة أخرى وبعثنا له قيمة x والتي هي 25 فسيكون الناتج 625 . الثاني :
SquareOut( out int x) { x = 6 ; x = x * x ; }
وتعمل نفس عمل ال reference إلا أنه إن بعث له قيمة 5 مثلا ً سيحفظ عنوانها ثم يربعها ويعيدها إلى نفس عنوانها 25 . وأما إذا لم يبعث له قيمة فيمكن إعطاؤها قيمة من داخل الmethod ويحفظ عنوانها ويعيدها إليه 36 . الثالث :
Square( int x) { x = x * x ; }
حيث إذا بعثنا له متغير يحمل القيمة 5 = y سيعمل منها نسخة ويربعها ويطبع 25 . لكن لو طبعنا المتغير y نجده مازال 5 . هكذا نكون قد انتهينا من تعريف المتغير by reference أو by value وفي الدرس التالي سنوضح إن شاء الله كيفية التعامل وإنتاج الأرقام العشوائية . وهذا هو البرنامج مع بعض الملا حظات الموضحة عليه : تحميل
حيث إذا بعثنا له متغير يحمل القيمة 5 = y سيعمل منها نسخة ويربعها ويطبع 25 . لكن لو طبعنا المتغير y نجده مازال 5 . هكذا نكون قد انتهينا من تعريف المتغير by reference أو by value وفي الدرس التالي سنوضح إن شاء الله كيفية التعامل وإنتاج الأرقام العشوائية . وهذا هو البرنامج مع بعض الملا حظات الموضحة عليه :
تحميل