
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
int a = 20;
int b = 30;
var result = sum(a, b);
}
public static int sum(int a, int b)
{
a = 25;
b = 23;
return a + b;
}
قطعه کد بالا را با هم بررسی کنیم:
دو متغیر a و b تعریف و مقداردهی شده اند. ما متدی به نام sum ساخته ایم که دو ورودی دارد. این ورودی ها را می گیرد، آنها را به اعداد 25 و 23 تغییر می دهد و جمع آنها را بر می گرداند. وقتی BreakPoint روی result قرار دهیم، می بینیم که مقدار بازگشتی 48 است.
اما اگر مقدار a و b را چک کنیم، همچنان 20 و 30 باقی مانده اند. دلیل این است که زمانی که a و b به ورودی متد sum داده می شوند، یک کپی از این متغیرها ساخته می شود و تغییرات روی این کپی ها اعمال می شود. به همین دلیل است که وقتی در کلاس Main breakpoint فعال می شود، میبینیم که متغیرهای a = 20 و b = 30 هستند.
برای اینکه نمونه ای از روی a و b ساخته نشود و تغییرات مستقیماً روی متغیرهای اصلی اعمال شود، از ref استفاده می کنیم:
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
int a = 20;
int b = 30;
var result = sum(ref a, ref b);
}
public static int sum(ref int a, ref int b)
{
a = 25;
b = 23;
return a + b;
}
حالا دوباره breakpoint بگذاریم. نتیجه تغییر نکرده است، اما این بار اگر به a و b که در کلاس Main هستند دقت کنیم، می بینیم که مقادیر آنها به 25 و 23 تغییر کرده اند و دیگر از a و b نمونه ای ساخته نشده است.