PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : قابلیت های جدید #c نسخه ی ۴: آرگومان های با نام و اختیاری



آبجی
14th February 2010, 12:24 AM
در ویژوال استادیو ۲۰۱۰ که نسخه ی CTP اون در حال حاضر در دسترس هست، #C چند قابلیت جدید رو به همراه داره.
دو تا از این قابلیت ها، “آرگومان های با نام و اختیاری” هست. این دو قابلیت پیشتر در VB.NET وجود داشته و #C در نسخه ی ۴ خودش با اونها همراه شده.
آرگومان های اختیاری اجازه میدن تا در زمان فراخوانی متد، مقداری رو برای پارامترهای اون تعریف نکنید. البته این مورد زمانی امکان پذیر هست که اون پارامتر در تعریف خودش، مقداری رو به طور پیش فرض داشته باشه.
در ذیل، امضای یک متد با آرگومان های اختیاری رو می بینید:

public void M(int x, int y = 5, int z = 7);

در متد فوق، آرگومان های y و z، آرگومان های اختیاری و دارای مقادیر پیش فرض ۵ و ۷ هستند.
در ذیل، نحوه ی فراخوانی های مختلف این متد رو می بینید:

M(1, 2, 3);
M(1, 2);
M(1);

در فراخوانی اول، به تمامی پارامترها مقداردهی شده. در فراخوانی دوم، پارامتر سوم ذکر نشده. در نتیجه همانند این است که متد به شکل (M(1, 2, 7 فراخوانی شده.
فراخوانی سوم نیز معادل با (M(1, 5, 7 است.
آرگومان های با نام اجازه میدن تا پارامترها رو همراه با ذکر نام اونها مقداردهی کنیم.
در ذیل، فراخوانی متد قبل را این بار با استفاده از نام پارامترها ملاحظه می کنید:

M(1, z:3);
M(x:1, z:3);

با استفاده از قابلیت پارامترهای با نام حتی می توان ترتیب ذکر مقادیر پارامترهای متد را نیز تغییر داد. به عنوان مثال:

M(z:3, x:1);

در مثال فوق مشاهده می کنید که ابتدا z مقداردهی شده و سپس x.
این دو قابلیت بر روی Overloading متدها نیز تاثیر می گذارند. همان طور که می دانید، در NET. می توان یک متد را با چند امضای مختلف تعریف کرد و سپس با توجه به تعداد و نوع پارامترهایی که به آن متد پاس داده می شود، یکی از نسخه های متد فراخوانی می شود.
به عنوان مثال فرض کنید متدی با نام M و دارای پنچ امضای ذیل داشته باشیم:

M(string s, int i = 1);
M(object o);
M(int i, string s = “Hello”);
M(int i);

نتیجه ی فراخوانی این متد به صورت ;(M(5 را بررسی می کنیم…
به نظر شما در این حالت کدامیک از نسخه های متد فراخوانی می شود؟…
امضای اول مناسب نیست، چون ۵ قابلیت تبدیل صریح به نوع string را ندارد.
امضای سوم مناسب است، چون پارامتر دوم آن اختیاری است. امضاهای دوم و چهارم نیز مناسب هستند اما…
امضای سوم و چهارم از امضای دوم بهتر هستند، چون تبدیل ۵ به نوع int از تبدیل آن به نوع object مناسب تر است. در نهایت، امضای چهارم از امضای سوم بهتر است، چون نسخه ی چهارم، پارامتر اختیاری ندارد و فراخوانی ما دقیقاً با آن تطبیق دارد. پس نسخه ی چهارم فراخوانی می شود.

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد