ویرگول
ورودثبت نام
محمد مهدی علیپور
محمد مهدی علیپور
خواندن ۳ دقیقه·۱ سال پیش

چگونگی استفاده از ref و out در سی شارپ به زبان ساده + مثال کاربردی

اموزش استفاده از ref   و out در سی شارپ
اموزش استفاده از ref و out در سی شارپ

شاید برای شما هم پیش آمده باشد که هنگام برسی کد های دیگران یا کد هایی که در آموزش ها برسی میشوند ref و out را زیاد شنیده باشید.در مطلب امروز به برسی کامل ref , out در زبان سی شارپ میپردازیم.


فرض کنید یک متغیر با نام num داریم و میخواهیم num را مقداردهی کنیم ، روش های مختلفی برای مقدار دهی وجود دارد.
برای شروع بیاید با کد زیر پیش برویم??‍?

روش اول برای مقدار دهی یک متغیر (برای مثال string)

string num = "ali";

روش بعدی میتونه این شکلی باشه

string num;
num = "ali";

روش بعدی مقدار دهی متغیر با استفاده از یک متد میباشد.

public static string Test()
{
return "ali";
}

خروجی متد ما از جنس رشته(string) میباشد، به این معنا که میتوان num را با متدی که بالا نوشتیم به شکل زیر مقدار دهی کنیم.

string num = Test();

شروع کار با ref , out در کد های سی شارپ

مقدار دهی یک متغیر در زبان سی شارپ به روش های مختلفی انجام میشود اما شاید مقدار بازگشتی متد ما با نوع متغیر یکی نباشد، شاید متد ما مقدار بازگشتی true یا false را برمیگرداند.
مثلا کد زیر را در نظر بگیرید

static void Main()
{
string name;
Test();
}
public static void Test()
{
}

زمانی که بخواهیم از طریق ورودی یک متد مقدار یک متغیر را تغییر دهیم میتوانیم از ref , out استفاده کنیم

نوشتن یک کد مثال با ref

static void Main()
{
string name = "arman"; value is Ali
Test(ref name);
}
public static void Test(ref string name)
{
name = "ali";
}

مقدارname برابر با ali میشود چرا که ما ورودی متد Test را طوری تعریف کردیم که مستقیم مقدار name را تغیر دهد، به عبارتی ما یک ارتباط مستقیم بین ورودی متد و مقدار متغیر ایجاد کردیم.
برای درک بهتر این کد را کپی و اجرا کنید

public class Program
{
static void Main()
{
string name = "arman";
Test(ref name);
}
public static void Test(ref string name)
{
name = "ali";
}
}

پارامتر های ref و out هر دو مثل یک دیگر عمل میکنند اما یک تفاوت بزرگ بین آنها وجود دارد
به کد زیر کمی نگاه کنید و آن را برای خود اجرا کنید.

public class Program
{
static void Main()
{
string name = "arman";
Test(out name);
}
public static void Test(out string name)
{
name = "ali";
}
}

خروجی کد بالا با خروجی کد قبلی یکسان خواهد بود ، پس چه تفاوتی بین این دو پارامتر وجود دارد؟
زمانی که با out پارمتری را به متد پاس میدهیم باید آن را یک بار داخل متد هم مقدار دهی کنیم
در غیر این صورت با خطا مواجه میشویم.
درست مثل تصویر پایین?

در چه صورتی خطا درست میشود؟

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


در اینجا تمام تلاش خودم رو کردم تا بهتون کاربرد ref و out را توضیح بدم امیدوارم لذت برده باشید!

سی شارپاموزش سی شارپrefoutref out
شاید از این پست‌ها خوشتان بیاید