PDA

View Full Version : سوال: فوری-تفاوت بین ref و out در c # چیه ؟



a.mahdi.h
شنبه 02 آبان 1388, 20:44 عصر
:متفکر::متعجب:
تفاوت بین ref و out در ارسال پارامتر چیه؟
لطفا پاسخ دهید!

misagh1359
شنبه 02 آبان 1388, 21:19 عصر
همونطوری که ی دونی یه تابع با پارامترهاش مفهوم پیدا می کنه مثلا

public void function(integer p1,string p2)

در حالت معمول شما از یک تابع فقط یک مقدار خروجی رو می گیرید ، حالا یه وقتایی هست که مثلا شما می خواین از یه تابع بیشتر از یه مقدار خروجی را بگیرید در این مواقع یک کلمه کلیدی Out رو به اول پارامترهای تابعتون اضافه می کنید و در بدنه تابع آنرا مقدار دهی می کنید ، پس از اجرای تابع شما می تونید اون مقدار و هم داشته باشین .
کلمه کلیدی ref هم همون Call By Refrence هست که توضیحات زیادی می تونی تو همین سایت در موردش پیدا کنی اگه هم کاربردشو بخوای بدونی مثلا تابعی که جای دو عدد a و b رو عوض کنه یعنی مقدار a رو بریزه تو b و بالعکس

ClaimAlireza
شنبه 02 آبان 1388, 21:24 عصر
در مجموعه مقالات استاد نصیری که فایل pdf هم تو سایت داره در مورد این مطلب توضیح کافی و وافی داده شده...

JaguarXF
شنبه 02 آبان 1388, 23:32 عصر
کاملترینش رو اینجا در این سایت توضیح داده:

http://lmgtfy.com/?q=out+C%23+ref+C%23

Unknownlive
یک شنبه 03 آبان 1388, 00:05 صبح
تفاوتی که داره Out اگه باشه انتساب مقدار به پارامتر اجباری میشه اما Ref اختیاری می باشد و می توان پارامتری را ارسال نکرد

powerboy2988
یک شنبه 03 آبان 1388, 00:15 صبح
تفاوتی که داره Out اگه باشه انتساب مقدار به پارامتر اجباری میشه اما Ref اختیاری می باشد و می توان پارامتری را ارسال نکرد

كلا شما مي توني به 2 صورت اطلاعات رو به يك event پاس بدي


by value
by reference

بطور معمول شما بيشتر متغير ها رو به صورت by value ارسال مي كني... اين روش به اين صورت مي باشد كه يك كپي از محتواي متغير مي گيره و به event ميده و event كار هاشو باهاش انجام ميده و وقتي كار event تموم شد اون كپي هم دور ريخته ميشه و اطلاعات اون متغير اصلي شما بدون هيچ دست كاري سالم باقي ميمونه

اما وقي از كلمه Ref استفاه مي كني شما آدرس اون متغير اصليتو پاس ميده به event و تغييراتي كه در اون event رخ ميده روي همون متغير اصلي شما انجام ميشه

و منظور از Out .. شما وقتي يك event داري مثل عملياتي روي 2 تا عدد و مي خواي توي اين event هم جمع 2 تا عدد رو حساب كني و هم ضربشونو و اينو هم مي دوني كه event يك خروجي بيشتر نداره... براي همين يك پارامتر تعريف مي كني كه از نوع Out باشه كه به عنوان خروجي اون Event استفاده مي شه... كه با اين كار مي توني هم ضرب و هم جمع رو به خروجي بدي..

RIG000
جمعه 13 مرداد 1396, 23:48 عصر
:متفکر::متعجب:
تفاوت بین ref و out در ارسال پارامتر چیه؟
لطفا پاسخ دهید!

هر چند قدیمی شده اما :
۱- ref : ارسال به وسیله reference هست . شما وقتی مقداری رو از نوع ref پاس میدید باید حتما قبل از هر چیز مقدار ref حاوی مقدار باشه . یعنی ref حتما به initial نیا داره . و وقتی شما از اون ع passbyReference این کار رو انجام می دید یعنی شما خانه حافظه ای رو در stack‌میگیرید و سپس مقدار اون رو در حافظه heap نگه داری میکنید . که ادرس خونه حافظه heap تخصیص داده شده در خانه حافظه stack میشنه که در این صورت مقدار حتما به خودش میگیره . پس تو استفاده از pass by ref نیازی به برگردوندن مقدار نیست .
2- out : اما برای استفاده از out شما میتونید مقداری رو initial نکنید ولی در ارسال پارامتر به وسیله out شما حتما مقدار برگشتی از متد مربوطه خواهید داشت . ومقدار مورد نظر شما در همون خونه حافظه stack میشنه و چون pass by ref نیست پس در خانه حافظه heap اتفاقی نمی افته .