PDA

View Full Version : سوال: تفاوت ارسال پارامتر با ref و out چیه؟



tarfand
سه شنبه 18 بهمن 1390, 13:39 عصر
سلام خدمت تمامی استاتید عرصه برنامه نویسی حرفه ای سی شارپ
خسته نباشید

تفاوت ارسال پارامتر با ref و out چیه؟ :متفکر:
من تفاوت ارسال پارامتر با ref و متغیر رو می دونم ولی در مورد out رو ،نه متاسفانه
با تشکر

flash118
سه شنبه 18 بهمن 1390, 13:58 عصر
با سلام دوست عزیز این مثال رو نگاه کنید همه چیز به دست میاد نیاز به توضیح نیست خیلی گویا و واضح بیان شده نگاه کنید :
class Program
{
private static void WithRef(ref string s)
{
s = "Baker";
}

private static void WithoutRef(string s)
{
s = "Charlie";
}

[STAThread]
static void Main(string[] args)
{
string s = "Able";

WithRef(ref s);
WithoutRef(s);

Console.WriteLine(s);
Console.ReadKey();

}
}
و اما اگه در صورت این که بازم قابل درک نبود به لینک زیر برید اونجا دیگه هم تصویری و هم با خروجی بهتون توضیح میده خیلی عالی
http://www.dotnetfunda.com/articles/article1134-difference-between-ref-and-out-parameter-.aspx

behrad110
سه شنبه 18 بهمن 1390, 14:21 عصر
ref و out تقریبا یک کار انجام میدن و برای زمانی استفاده میشن که شما میخواین بیش از یک خروجی دریافت کنید چون توابع نمی تونن بیش از یک return داشته باشن پس در پارامتر های ورودی با ref یا out کاری میکنیم که پارامتر حالت خروجی به خودش بگیره .اما تفاوت شون در اینه که وقتی پارامتری رو ref تعریف میکنی حتما قبلش باید initialize بشه

b.saminjad
سه شنبه 18 بهمن 1390, 14:26 عصر
سلام

ارسال یک پارامتر با ref یا out باعث میشه که در متد فراخوانی کننده حافظه ی جدیدی برای انها در نظر گرفته نشود بدین معنی که پارمترهای متد مستقیم به حافظه متغیر ارسال شده دسرسی داشته و با تغییر ان تغییرات بروی متغیر اصلی اعمال میشود

تفات ref و out : تفات این دو مورد این است که متغیری با پیشوند out حتما باید در متدی که ارگومانها به ان ارسال میشود مقدار دهی شود



private void Form1_Load(object sender, EventArgs e)
{
int i, j=200;
x(out i, ref j);

}

void x(out int x1, ref int x2)
{

x1 = 200;// حتما باید مقدار دهی شود

}




نکته : متغیر ref باید یا مقدار دهی شده باشد یا سراسری باشد

m_account
سه شنبه 18 بهمن 1390, 15:34 عصر
سلام
در واقع اگر بخوایم حرف دوستمون رو کامل کنیم :
out یعنی به کاربر بگیم که من به، مقدار داشتن متغیری که به تابع ارسال می کنی کاری ندارم و تنها میخواهم پرش کنم
ولی
ref عکس این هست و از مقدار متغیر ارسالی میخواهد استفاده کند.

shadi khanum
سه شنبه 18 بهمن 1390, 19:14 عصر
دوست عزیز هر دوی این keywordها وقتی استفاده میشه که شما بخوای متغیری به تابع بفرستی و توی تابع اونو تغییر بدی و بعد از تموم شدن تابع تغییراتی که کرده رو متوجه بشی و تغییرات به بیرون ار تابع هم منتقل بشه.. بیشتر وقتی استفاده میشه که شما میخوای از تابعتون چندتا خروجی بگیری و چون نمیتونی بیشتر از یه خروجی از تابع بگیری، یه متغیر ورودی از نوع ref یا out تعریف میکنی و با مقدار null مثلا یا هر چیز دیگه به تابع میفرستی و تو تابع مقدار دومی رو که میخوای برگردونی توی اون میریزی..
موفق باشی