آخرین خبرها
خانه » مطالب آموزشی » برنامه نویسی و وب » سی شارپ » تفاوت بین پارامتر Out و Ref در سی شارپ

تفاوت بین پارامتر Out و Ref در سی شارپ

چند نوع شیوه ارسال پارامتر به تابع وجود دارد  از جمله :

  • value parameter
  • ref parameter
  • out parameter

 


ارسال پارمتر به صورت value:

ارسال به روش value parameter به صورت پیش فرض می باشد . هنگامی که ما متغببری (variable)  به  ورودی یک متد ارسال می کنیم ، در صورتی که نوع آن پارامتر را ذکر نکنیم به صورت مقداری ارسال می شود. به عبارت دیگر مقدار آن متغییر به تابع فرستاده می شود .  در صورت تغییر مقدار متغییر در بدنه تابع ، تغییری در پارامتر ارسال شده ، ایجاد نمی شود.

هر گاه در اعلان پارامترها از کلمات کلیدی ref  و out  و… استفاده نشود به صورت value فرستاده می شود.

مثال :

تابع زیر را در نظر بگیرید :

        public void plus(int t)
        {
            Console.WriteLine("the plus function run : "+ ++t);
        }

فراخوانی تایع در بدنه :

int t = 10;
            plus(t);
            Console.WriteLine("the t variable value :  " + t);
            Console.ReadLine();

خروجی برنامه :

the plus function run : 11
the t variable value :  10
  •  توجه کردید که هر تغییری در بدنه تابع تاثیری در پارمتر نداشت.

 


ارسال پارمتر به صورت ref :

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

قبل از ارسال پارمتر به صورت ref حتما باید متغییر مقدار داشته باشد.

تابع را در نظر بگیرید :

 public void plus(ref int t)
        {
            Console.WriteLine("the plus function run : "+ ++t);
        }

فراخوانی تابع  :

int t = 10;
            plus(ref t);
            Console.WriteLine("the t variable value :  " + t);
            Console.ReadLine();

خروجی :

the plus function run : 11
the t variable value :  11
  •  تغییر در متغییر محلی روی پارمتر اصلی اعمال شد.
  • نوشتن کلمه کلیدی ref هم در ارسال به تابع وهم در دریافت پارمتر الزامی می باشد.

 


ارسال پارمتر به صورت out :

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

نیازی به مقدار دهی قبل از ارسال به متد نیست ولی حتما باید درون تابع (قبل از بازگشت به متدی فراخوانی شده) مقدار بگیرد.
تابع را مشاهده فرمایید :

 public void plus(out int t)
        {
            //مقدار دهی درون تابع
            t = 10;
            Console.WriteLine("the plus function run : "+ ++t);
        }

فراخوانی تابع:

 //نیازی به گرفتن مقدار نیست
            int t;
            Program.plus(out t);
            Console.WriteLine("the t variable value :  " + t);
            Console.ReadLine();

خروجی :

the plus function run : 11
the t variable value :  11

برای درک بهتر از یک مثال برای 3 نوع پارمتر استفاده کردم.

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

 

منبع : سافت ساز




  • پاسخ دهید

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