پارامترهای اختیاری

پارامترهای اختیاری همانگونه که از اسمشان پیداست اختیاری هستند و می‌توان به آنها آرگومان ارسال کرد یا نه. این پارامترها دارای مقادیر پیشفرضی هستند. اگر به اینگونه پارامترها آرگومانی ارسال نشود از مقادیر پیشفرض استفاده می‌کنند. به مثال زیر توجه کنید :

   1: using System;                                                                   
   2:                                                                                 
   3: public class Program                                                            
   4: {                                                                               
   5:     static void PrintMessage(string message = "Welcome to Visual C# Tutorials!")
   6:     {                                                                           
   7:         Console.WriteLine(message);                                             
   8:     }                                                                           
   9:                                                                                 
  10:     public static void Main()                                                   
  11:     {                                                                           
  12:         PrintMessage();                                                         
  13:                                                                                 
  14:         PrintMessage("Learn C# Today!");                                        
  15:     }                                                                           
  16: }
Welcome to Visual C# Tutorials! 
Learn C# Today!

متد PrintMessage() (خطوط 8-5) یک پارامتر اختیاری دارد. برای تعریف یک پارامتر اختیاری می‌توان به آسانی و با استفاده از علامت = یک مقدار را به یک پارامتر اختصاص داد (مثال بالا خط 5). دو بار متد را فراخوانی می‌کنیم. در اولین فراخوانی (خط 12) ما آرگومانی به متد ارسال نمی‌کنیم بنابراین متد از مقدار پیشفرض (Welcome to Visual C# Tutorials!) استفاده می‌کند. در دومین فراخوانی (خط 14) یک پیغام (آرگومان) به متد ارسال می‌کنیم که جایگزین مقدار پیشفرض پارامتر می‌شود. اگر از چندین پارامتر در متد استفاده می‌کنید همه پارامترهای اختیاری باید در آخر بقیه پارامترها ذکر شوند.

به مثالهای زیر توجه کنید.

void SomeMethod(int opt1 = 10, int opt2 = 20, int req1, int req2) //ERROR

void SomeMethod(int req1, int opt1 = 10, int req2, int opt2 = 20) //ERROR

void SomeMethod(int req1, int req2, int opt1 = 10, int opt2 = 20) //Correct

وقتی متدهای با چندین پارامتر اختیاری فراخوانی می‌شوند باید به پارامترهایی که از لحاظ مکانی در آخر بقیه پارامترها نیستند مقدار اختصاص داد. به یاد داشته باشید که نمی‌توان برای نادیده گرفتن یک پارامتر به صورت زیر عمل کرد :

void SomeMethod(int required1, int optional1 = 10, int optional2 = 20)
{
   //Some Code
}

// ... Code omitted for demonstration

SomeMethod(10, , 100); //Error

اگر بخواهید از یک پارامتر اختیاری که در آخر پارامترهای دیگر نیست رد شوید و آن را نادیده بگیرید باید به از نام پارامترها استفاده کنید.

SomeMethod(10, optional2: 100);

برای استفاده از نام آرگومانها شما به راحتی می‌توانید نام مخصوص پارامتر و بعد از نام علامت کالن ( : ) و بعد مقدار اختصاص شده به آن را نوشت مانند (optional2: 100) . متد بالا هیچ آرگومانی برای پارامتر اختیاری optional1 ندارد بنابراین این پارامتر از مقدار پیشفرضی که در زمان تعریف متد به آن اختصاص داده شده است استفاده می‌کند.