الفرق بين ref و out من الكلمات الرئيسية في C #
الكلمة ref
1- من الضروري تهيئة المعلمات قبل تمريرها إلى الدالة
2- ليس من الضروري تهيئة قيمة المعلمة قبل العودة إلى دالة الاستدعاء
3- يفيد تمرير القيمة من خلال ref عندما تحتاج الدالة المطلوبة أيضًا إلى تغيير قيمة المعلمة التي تم تمريرها.
امثلة :
public void Sum(ref int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x=4;
Sum(ref x);
MessageBox.Show(x.ToString());
}
// OutPut -> 80
لاحظ كيف تم تغيير قيمة المتغير x في الدالة Form2_Load وذلك بسبب تمرير المتغير بالمرجعية
لو نقوم بتمرير المتغير بالقيمة لن يتم تغيير القيمة في الدالة Form2_Load
مثال
public void Sum( int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x=4;
Sum( x);
MessageBox.Show(x.ToString());
}
// OutPut -> 4
لو نقوم بتمرير متغير مرجعي بدون تهيئته بقيمة سوف تحصل على Error
مثال :
public void Sum(ref int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x; // Error
Sum(ref x);
MessageBox.Show(x.ToString());
}
الكلمة out
1- ليس من الضروري تهيئة المعلمات قبل تمريرها إلى الدالة
2- من الضروري تهيئة قيمة المعلمة قبل العودة إلى دالة الاستدعاء
3- نفس كلمة ref في رقم 3
امثلة :
public void Sum(out int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x= 10;
Sum(out x);
MessageBox.Show(x.ToString());
}
// OutPut -> 80
مثال اخر
public void Sum(out int x)
{
x = 80;
}
private void Form2_Load(object sender, EventArgs e)
{
int x; //
Sum(out x);
MessageBox.Show(x.ToString());
}
// OutPut -> 80
اخر مثال
public void Sum(out int x)
{
}
private void Form2_Load(object sender, EventArgs e)
{
int x = 50;
Sum(out x);
MessageBox.Show(x.ToString());
}
//Error
سببب الخطاء من الضروري تهيئة قيمة المعلمة قبل العودة إلى دالة الاستدعاء
انتهى ....................