بتـــــاريخ : 11/8/2008 7:12:49 PM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1556 0


    الدرس الخامس عشر : بعض

    الناقل : mahmoud | العمر :35 | المصدر : www.kettaneh.net

    كلمات مفتاحية  :
    دروس لغة سي شارب

    وفي هذا الدرس إن شاء الله سنوضح :
    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) لحساب مربع عدد صحيح :

    الأول :
     

     
     
    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 وفي الدرس التالي سنوضح إن شاء الله كيفية التعامل وإنتاج الأرقام العشوائية .

    وهذا هو البرنامج مع بعض الملا حظات الموضحة عليه :

    تحميل

     

    كلمات مفتاحية  :
    دروس لغة سي شارب

    تعليقات الزوار ()