تری دینگا
برنامه نویسیمقالات

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

نمونه برنامه سی شارپ

تفاوت بین پارامتر 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 به یک تابع ارسال می کنیم ، مقدار متغییر ارسال نمی شود بلکه آدرس متغییر به بدنه متد فرستاده می شود و هر تغییری درمتغییر محلی روی متغییر اصلی نیز اعمال می شود. به این نوع پارمترها ارجاعی می گویند.

[symple_box color=”blue” text_align=”center” width=”100%” float=”none”] قبل از ارسال پارمتر به صورت ref حتما باید متغییر مقدار داشته باشد.
[/symple_box]

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

 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 حتما باید مقدار دهی شوند و هنگامی که بخواهیم اطلاعاتی را به متد ارسال کنیم و پس از دستکاری شدن ، اطلاعات برگشت داده شود.


برای مشاهده کلیه سورس های برنامه سی شارپ کلیک نمایید.

تمامی مطالب توسط تیم سافت ساز ترجمه و جمع آوری می شود . منبع سافت ساز

امتیاز به این مطلب :

امتیاز

جمع امتیازات

لطفا به این مطلب امتیاز دهید

User Rating: 3.24 ( 7 votes)

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

نشانی ایمیل شما منتشر نخواهد شد.

دکمه بازگشت به بالا