محتویات سایت
        برچسب های محبوب 








 
   معرفی ویژگی های جدید Csharp 2010 - قسمت اول
  در این مقاله به معرفی پارامتر های اختیاری برای توابع در Csharp 2010 می پردازم.
   C#
   ۱۵۲۳۹
   این مقاله حاوی فایل ضمیمه نمی باشد
   مرتضی صحراگرد
   ۱۳۸۹/۲/۱
نسخه قابل چاپ نسخه قابل چاپ

یکی از امکانات جالب و جدید معرفی شده در Csharp 2010، پارامتر های اختیاری برای توابع می باشند. بدین ترتیب که اکنون می توانیم هنگام تعریف پارامترهای یک تابع، مقدار پیشفرضی برای آن تعیین نماییم و در صورتی که برنامه نویس هنگام فراخوانی تابع، مقداری را برای آن ارسال ننماید، مقدار پیشفرض پارامتر منظور می شود.

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

Overload نمودن توابع در زبان #C معمولا به شکل زیر انجام می شود. فرض کنید قصد داریم سه عدد Overload برای یک تابع بنویسیم که وظیفه آن ایجاد یک کاربر جدید می باشد.

public void CreateUser(string username, string password)
{
    CreateUser(username, password, false);
}
public void CreateUser(string username, string password, bool isAdmin)
{
    CreateUser(username, password, false, string.Empty, string.Empty);
}
public void CreateUser(string username, string password, bool isAdmin, string firstName, string lastName)
{
    //عملیات ایجاد کاربر جدید با استفاده از پارامتر های ارسال شده
    // انجام می شود
}

همنانطور که در قطعه کد بالا ملاحظه می نمایید، ما امکانات زیر را برای برنامه نویس فراهم نموده ایم.

  • برای ثبت نام کاربر فقط نام کاربری و رمز عبور را ارسال نماید.

  • برای ثبت نام، پارامترهای نام کاربری، رمز عبور و یک مقدار منطقی (isAdmin) که نشان دهنده مدیر بودن کاربر است را ارسال نماید.

  • برای ثبت نام، تمام پارامتر های موجود که شامل نام کاربری، رمز عبور، isAdmin، نام و نام خانوادگی است را وارد نماید.

نحوه فراخوانی این توابع می تواند به هر سه شکل زیر باشد.

private void Form1_Load(object sender, EventArgs e)
{
    CreateUser("MyUserName", "MyPassword");
    CreateUser("MyUserName", "MyPassword", false);
    CreateUser("MyUserName", "MyPassword", false, "MyFirstName", "MyLastName");
}

در حقیقت وظیفه اصلی دو تابع اول از توابع بالا را می توان مقدار اولیه دادن به پارامتر های متد آخر بیان نمود. با استفاده از متدهای بالا ما این امکان را فراهم نموده ایم که برنامه نویس برخی از پارامتر ها را به صورت اختیاری به تابع ایجاد کاربر جدید، ارسال نماید.

با استفاده از ویژگی پارامتر های اختیاری در Csharp 2010 می توانیم سه تابع در تعریف شده در بالا را با استفاده از فقط یک تابع بنویسیم.

در تابع زیر این عمل را ملاحظه می نمایید.

public void CreateUser(string username, string password, 
			bool isAdmin = false, string firstName = "", string lastName = "")
{
    //عملیات ایجاد کاربر جدید با استفاده از پارامتر های ارسال شده
    //انجام می شود
}

اگر با دقت به تابع بالا دقت نمایید، ملاحظه می کنید که هنگام تعریف پارامتر هایی که قصد داریم به شکل اختیاری تعریف شوند (در اینجا پارامتر های isAdmin و firstName و lastName مورد نظر می باشند)، مقدار پیشفرضی به آن ها نسبت داده ایم. در نتیجه اگر هنگام فراخوانی این تابع، مقداری برای پارامتر های اختیاری ارسال نشود، مقدار پیشفرض برای آن ها در نظر گرفته می شود.

به شکل زیر توجه نمایید. پارامتر های اختیاری در داخل Tooltip ی که برنامه VS 2010 نشان داده است در داخل علامت براکت "[]" نمایش داده شده اند و بدین وسیله برنامه نویس متوجه خواهد شد که ارسال این پارامتر ها اختیاری می باشد.


در قطعه کد زیز نیز می توانید فراخوانی های مختلف این تابع را ببینید که کاملا شبیه زمانی است که سه تابع مختلف را برای Overload، نوشته بودیم.

private void Form1_Load(object sender, EventArgs e)
{
    CreateUser("MyUserName", "MyPassword");
    CreateUser("MyUserName", "MyPassword", false);
    CreateUser("MyUserName", "MyPassword", false, "MyFirstName", "MyLastName");
}

پارامتر های اختیاری یک ویژگی بسیار جالب دیگر را نیز ارائه نموده اند. فرض کنید برنامه نویس نیاز پیدا می کند که برای ایجاد کاربر فقط نام کاربری و رمز عبور و نام شخص را جهت ایجاد کاربر ارسال نماید و به عبارت دیگر قصد ندارد که پارامتر های isAdmin و lastName را ارسال نماید.

برای انجام اینکار تا قبل از معرفی امکان جدید پارامتر های اختیاری، شما باید یک تابع دیگر نیز به شکل Overload اضافه می نمودید که این امکان را برای برنامه نویس فراهم می نمودید و در نتیجه هر چقدر که درخواست های برنامه نویس بیشتر می شد معمولا باعث نوشتن متدهای Overload بیشتری می شد.

اما پارامتر های اختیاری این مشکل را نیز رفع نموده اند. در صورتی که قصد داشته باشیم فقط برای برخی از پارامتر های اختیازی در اینگونه توابع مقداری ارسال نماییم، کافی است که نام پارامتر را نیز همراه با مقدار مورد نظرمان در هگام فراخوانی تابع ارسال نماییم.

این عمل به شکل زیر امکان پذیر می باشد.

private void Form1_Load(object sender, EventArgs e)
{
    CreateUser("MyUserName", "MyPassword", firstName: "MyFirstName");
}

به نحوه ارسال پارامتر firstName توجه فرمایید.