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