تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس السابع : الدوال والطرق
#4
منقول من المنتدى القديم
الكاتب احمد جمال المشرف العام

الوظيفة Out :

كما تعلمنا في المثال السابق فإننا نقوم بارجاع النتيجة من خلال return ، ماذا لو اردنا اعادة نتيجة من دالة void ، يتم ذلك باستخدام الدالة Out بالشكل التالي :

C#:

كود :
static void sum(int number1, int number2, out int total)
      {
            total = number1 + number2;

      }

VB.net:

كود :
Private Shared Sub sum(ByVal number1 As Integer, ByVal number2 As Integer, ByRef total As Integer)    
    total = number1 + number2
End Sub

وعند استدعاء الدالة يتم تمرير المتغير الذي نحتاج إليه لعرض النتيجة ايضاً :

C#:

كود :
int result;
          sum(5, 8,out result);
          Console.Write(result);
          Console.ReadKey();

VB.net:

كود :
Dim result As Integer
sum(5, 8, result)
Console.Write(result)
Console.ReadKey()

ولكن ما هو السبب الذي قد يدفعني لاستخدام هذه الطريقة بدلاً من استخدام return ؟

الاجابة الابسط ، هي انني لو اردت اعادة اكثر من نتيجة مثل ناتج الضرب والجمع والقسمة ، فليس امامي حل سوى اعادة مصفوفة بالارقام وقراءتها هناك ، الحل الابسط هو باستخدام out .

الارسال بالمرجع byref والارسال بالقيمة byval :

لنفترض المثال الخاص بعملية الطرح بالشكل التالي :
C#:

كود :
int x=5;
int y=10;
sub(x,y);

VB.net:

كود :
Dim x As Integer = 5
Dim y As Integer = 10
sub(x, y)

والدالة :

C#:

كود :
static void sub(int number1, int number2)
      {
            number1 = number1 - number2;
            return number1;

      }
VB.net:
كود :
Private Shared Sub [sub](ByVal number1 As Integer, ByVal number2 As Integer)
    
    number1 = number1 - number2
    
    Return number1
    
    
    
End Sub

في الدالة السابقة قمنا بتغيير قيمة number1 ، ولكن هل سيغير هذا من قيمة x التي ارسلناها ، الإجابة هي بلا ، هذا ما يعرف بارسال القيمة حيث نقوم في هذه الحالة بارسال قيمة x إلى الدالة وليست قيمة X .

الارسال بالمرجع ByRef هي الحالة الثانية ، في هذه الحالة يتم ارسال عنوان المتغير X في الذاكرة إلى الدالة ، هذا ما يعني ان اي تغيير في number1 سيؤثر بالضرورة على المتغير x .

لكتابة الكود السابق بطريقة ByRef نكتب الكود التالي :

C#:

كود :
static void sub(ref int number1, ref int number2)
      {
            int result = number1 - number2;
            return result;

      }

Vb.net:

كود :
Private Shared Sub [sub](ByRef number1 As Integer, ByRef number2 As Integer)

    Dim result As Integer = number1 - number2
    
    Return result
End Sub

الارسال بالقيمة يمكن تطبيقه فقط مع المتغيرات البسيطة ، اما المتغيرات المركبة مثل Struct فيتم التعامل معه ByRef افتراضياً ...


والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
الدرس السابع : الدوال والطرق - بواسطة oneyemenweb2_mybb_import4801 - 06-10-12, 10:13 PM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم