کلمه کلیدی out و ref
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
کلمه کلیدی out و ref
از دو کلمه کلیدی ref و out در فراخوانی متدها به روش ارجاع استفاده میشود.
برای اینکه از فراخوانی به روش ارجاع استفاده کنید، باید در هنگام تعریف متد، قبل از مشخص کردن متغیرهای ورودی متد، از دو کلمه ref و out استفاده کنید.
الف) کلمه کلیدی ref
از کلمه کلیدی ref زمانی استفاده میکنیم که متغیر نسخه اصلی ما دارای ورودی باشد! مثل همین مثال بالا که int number برابر ۲ بود، درنتیجه بخاطر وجود عدد ۲، این متغیر دارای مقدار است!
public int Sum(ref int a)
{
return a + 10;
}
همانطور که در مثال بالا مشاهده میکنید، ما در هنگام تعریف متد Sum برای ورودی متد که متغیر int a است، ابتدا کلمه کلیدی ref را نوشتهایم، با اینکار هر زمان که شناسه یک متغیر به عنوان ورودی به متد Sum ارسال شود، تغییرات بر روی نسخه اصلی آن متغیر نیز اعمال خواهد شد:
int number = 2;
int num = Sum(number);
Console.WriteLine(number);
:خروجی
num = 12
number = 12
درنتیجه مقدار قبلی درون متغیر int number پاک شده و مقدار جدید که از متد Sum تولید میشود، درون متغیر int number ذخیره میشود.
ب) کلمه کلیدی out
از کلمه کلیدی out زمانی استفاده میکنیم که متغیر نسخه اصلی ما دارای ورودی نباشد! مثل ;int number
یعنی فقط تعریف شده و هنوز هیچ مقدار یا همان دادهای داخل آن درج نشده است.
نکته مهم: در هنگام استفاده از کلمه کلیدی out، باید درون متد خود، ابتدا یک مقدار بی اثر را برای متغیر مشخص کنید!
public int Sum(out int a)
{
int a = 0;
return 5 + 10;
}
همانطور که در مثال بالا مشاهده میکنید، ما در هنگام تعریف متد Sum برای ورودی متد که متغیر int a است، ابتدا کلمه کلیدی out را نوشته و سپس درون محدوده بلاک متد، برای متغیر int a یک مقدار صفر که در عملیات جمع بی اثر است را مشخص کردهایم؛ با اینکار هر زمان که شناسه یک متغیر به عنوان ورودی به متد Sum ارسال شود، تغییرات به صورت مستقیم درون نسخه اصلی متغیر ذخیره خواهد شد.
int number;
int num = Sum(number);
Console.WriteLine(number);
:خروجی
num = 15
number = 15
برای درک بهتر مبحث فراخوانی به روش ارجاع، قطعه کدی را برایتان آماده کردهایم که بارها در برنامههای خود از آن استفاده نمودهاید:
Console.Write("Enter number: ");
int number;
while (!int.TryParse(Console.ReadLine(), out number))
{
Console.WriteLine("Warning!!!\tjust number");
}
Console.WriteLine("Number is : {0}", number);
این قطعه کد بسیار کاربردیای است، در این کد ابتدا از کاربر درخواست ورودی از نوع عددی میشود، اما با استفاده از حلقه while شرطی گذاشتهایم به عنوان تا زمانی که کاربر تنها کاراکتر عدد وارد نکرده، به او پیغام Warning داده و مجدد از او درخواست کند تا عدد وارد کند، درصورتی که کاربر بالاخره تصمیم گرفت عددی را به عنوان ورودی وارد کنید، آن ورودی از نوع عدد دریافت شده و با استفاده از کلمه کلیدی out درون متغیر number ذخیره میکند.
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.