سی شارپ

آموزش پارامترهای توابع در سی شارپ

Csharp

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

اولین چیزی که ما به آن می پردازیم، مدیفایرهای ref و out است. سی شارپ و سایر زبانها نیز بین دو نوع پارامتر تمایز قائل می شوند: پارامترهای “براساس مقدار” و پارامترهای “بر اساس مرجع”. پیش فرض در سی شارپ “بر اساس مقدار” است ، که در اصل به این معنی است که وقتی یک متغیر را به یک فراخوانی تابع منتقل می کنید، در واقع به جای رجوع به آن ، یک کپی از شیء را ارسال می کنید. این همچنین بدان معنی است که شما می توانید بدون اینکه روی شی اصلی که به عنوان پارامتر منتقل کرده اید، تأثیر بگذارید، از درون تابع، پارامتر را تغییر می دهید.

 


برنامه نویسی شبکه معماری کامپیوتر هوش مصنوعی و تجاری

توی این پک فوق العاده، صفرتاصد مبانی برنامه نویسی رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با صفرتاصد مبانی برنامه نویسی اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

با واژه های کلیدی out و ref می توانیم این رفتار را تغییر دهیم، بنابراین ما به جای مقدار آن، یک مرجع به شیء منتقل می کنیم.

ref modifier در سی شارپ

مثال زیر را در نظر بگیرید:

static void Main(string[] args)
{
int number = 20;
AddFive(number);
Console.WriteLine(number);
Console.ReadKey();
}

static void AddFive(int number)
{
number = number + 5;
}

ما یک عد صحیح تعریف کرده ایم که مقدار ۲۰ را به آن اختصاص داده ایم، و سپس ما از متد AddFive() استفاده می کنیم، که باید مقدار ۵ را به عدد ما اضافه کند. اما آیا این کار را انجام می دهد؟ خیر. مقداری که از داخل تابع، به عدد اختصاص می دهیم، هرگز از خارج از تابع تغییر نمی کند، زیرا ما به جای یک رفرنس به عدد؛ یک نسخه از مقدار عدد را منتقل کرده ایم. می توان گفت که سی شارپ بر اساس این اصل، به سادگی کار می کند، و در بسیاری موارد ، نتیجه مطلوب است. با این حال، در مورد این مثال، ما در واقع مایل به تغییر عدد درون تابع خود هستیم. کلمه کلیدی ref را وارد کنید:

static void Main(string[] args)
{
int number = 20;
AddFive(ref number);
Console.WriteLine(number);
Console.ReadKey();
}

static void AddFive(ref int number)
{
number = number + 5;
}

همان طور که مشاهده می کنید؛ همه آنچه که انجام داده ایم، اضافه کردن کلیدواژه ref به بیان تابع و نیز فراخوانی تابع است. اگر برنامه را اکنون اجرا کنید؛ پس از بازگرداندن فراخوانی تابع؛ خواهید دید که مقدار تابع اکنون تغییر می کند.

out modifier

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

استفاده از ref یا out بستگی به موقعیت دارد، زیرا پس از شروع استفاده از آنها متوجه خواهید شد. هر دو به طور معمول برای کار روی مسئله ای استفاده می شوند که بتوان با به کار گیری سی شارپ؛ یک مقدار را از تابع برگرداند.

همان طور که در بالا نشان دادیم؛ استفاده از مدیفایر out مشابه استفاده از مدیفایر ref می باشد. فقط به سادگی کلیدواژه ref را به out تغییر می دهید. در مثال بالا، به یاد داشته باشید که باید مقدار تخصیص داده شده به عددی که در متد آمده است، حذف نمایید و در عوض تابع فراخوانی را بیان کنید.

مدیفایر params

تا کنون؛ همه ی توابع ما مقدار ثابتی از پارامترها را پذیرفته اند. با این حال، در برخی موارد؛ شما ممکن است نیاز به تابعی داشته باشید که تعداد پارامترهایی که اتخاذ می کنند؛ اختیاری باشد. این امر نیز مشابه زیر، با پذیرش یک آرایه یا یک لیست به عنوان یک پارامتر قابل انجام است:

static void GreetPersons(string[] names) { }

با این حال، فراخوانی آن؛ کمی بد سلیقگی است. در شکلی که کوتاه ترین حالت خود را دارد؛ فراخوانی به شکل زیر در می آید:

GreetPersons(new string[] { “John”, “Jane”, “Tarzan” });

این قابل قبول است؛ اما می توان با کلیدواژه های params هوشمندانه تر نیز انجام شود:

static void GreetPersons(params string[] names) { }

فراخوانی آن مشابه زیر خواهد بود:

GreetPersons(“John”, “Jane”, “Tarzan”);

مزایت دیگر استفاده از رویکرد params آن است که شما می توانید پارامترهای صفر را نیز به آن منتقل کنید. توابع با پارامترهای params می توانند حتی پارامترهای دیگری را نیز اتخاذ کنند، در بررسی مت پارامترهایی با کلیدواژه params آخرین نوع پارامترها هستند. علاوه بر آن؛ تنها یک پارامتر با استفاده از کلیدواژه params را می توان در هر تابع استفاده کرد. در اینجا مثال آخر و کاملتر آورده شده است:

static void Main(string[] args)
{
GreetPersons(0);
GreetPersons(25, “John”, “Jane”, “Tarzan”);
Console.ReadKey();
}

static void GreetPersons(int someUnusedParameter, params string[] names)
{
foreach(string name in names)
Console.WriteLine(“Hello, ” + name);
}

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in,

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست