پارامترهای out

پارامترهای out پارامترهایی هستند که متغیرهایی را که مقدار دهی اولیه نشده‌اند را قبول می‌کنند. کلمه کلیدی out زمانی مورد استفاده قرار می‌گیرد که بخواهیم یک متغیر بدون مقدار را به متد ارسال کنیم. متغیر بدون مقدار اولیه، متغیری است که مقداری به آن اختصاص داده نشده است. در این حالت متد یک مقدار به متغیر می‌دهد. ارسال متغیر مقداردهی نشده به متد زمانی مفید است که شما بخواهید از طریق متد متغیر را مقدار دهی کنید. استفاده از کلمه کلیدی out باعث ارسال آرگومان به روش ارجاع می‌شود نه مقدار. به مثال زیر توجه کنید :

   1: using System;
   2: 
   3: public class Program
   4: {
   5:     static void GiveValue(out int number)
   6:     {
   7:         number = 10;
   8:     }
   9: 
  10:     public static void Main()
  11:     {
  12:         //Uninitialized variable
  13:         int myNumber;
  14: 
  15:         GiveValue(out myNumber);
  16: 
  17:         Console.WriteLine("myNumber = {0}", myNumber);
  18:     }
  19: }
myNumber = 10

از کلمه کلیدی out برای پارامترهای متد استفاده شده است بنابراین می‌توانند متغیرهای مقداردهی نشده را قبول کنند. در متد Main ، خط 15 متد را فراخوانی می‌کنیم و قبل از آرگومان کلمه کلیدی out را قرار می‌دهیم. متغیر مقداردهی نشده (myNumber) به متد ارسال می‌شود و در آنجا مقدار 10 به آن اختصاص داده می‌شود (خط 7). مقدار myNumberدر خط 17 نمایش داده می‌شود و مشاهده می‌کنید که مقدارش برابر مقداری است که در داخل متد به آن اختصاص داده شده است (یعنی 10). استفاده از پارامترهای out بدین معنا نیست که شما همیشه نیاز دارید که آرگومانهای مقداردهی نشده را به متد ارسال کنید بلکه آرگومانهایی که شامل مقدار هستند را هم می‌توان به متد ارسال کرد. این کار درحکم استفاده از کلمه کلیدی ref است.

همانطور که قبلاً هم ذکر شد، معمولاً متد از کلمه کلیدی return برای برگشت مقدار استفاده می‌کند. متاسفانه این کلمه کلیدی فقط می‌تواند یک مقدار را برگشت دهد. گاهی اوقات لازم است که یک متد دارای چندین خروجی باشد. اینجاست که از کلمه کلیدی out استفاده می‌شود. به مثال زیر توجه کنید :

   1: using System;
   2: 
   3: class Program
   4: {
   5:     public static void Rectangle(int len, int width, out int area, out int perimeter)
   6:     {                                                                                
   7:         area = len * width;                                                          
   8:         perimeter = 2 * (len + width);                                               
   9:     }                                                                                
  10: 
  11:     static void Main(string[] args)
  12:     {
  13:         int area, perimeter;
  14: 
  15:         Program.Rectangle(5, 4, out area, out perimeter);
  16: 
  17:         Console.WriteLine("Area of Rectangle is {0}\t", area);
  18:         Console.WriteLine("Perimeter of Rectangle is {0}\t", perimeter);
  19:         Console.ReadLine();
  20:     }
  21: }
Area of Rectangle is 20
Perimeter of Rectangle is 18

متد بالا یعنی ()Rectangle قرار است دو خروجی داشته باشد. این دو خروجی محیط (area) و مساحت (perimeter) مستطیل می‌باشند. در نتیجه قبل از آنها و در قسمت پارامترهای متد (خط 5) و هنگام فراخوانی متد کلمه کلیدی out را می‌نویسیم (خط 15).