نسخه آزمایشی

آموزش تصویری سی شارپ – پارامتر های توابع
آموزش تصویری سی شارپ – پارامتر های توابع

 پارامتر های ref-out-params پارامتر های ref/out

 در C# به طور پیشفرض انتقال پارامتر ها از روش مقدار است.یعنی اگر شما متغیری را به عنوان پارامتر به یک تابع ارسال کنید، پس از طی عملیات داخل تابع هنگامی به بیرون و ادامه برنامه بر می گردید مقدار متغیر i تحت تاثیر تابع نبود و همان آخرین مقداری است که قبل از ورود به تابع داشته است به عبارتی  تغییر نکرده است.

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

      در زبان C# نیاز هست که قبل از ارسال پارامتر به تابع مقدار دهی اولیه بکنید.گاهی این مقدار دهی اولیه برای شما مهم نیست و یا ممکن است در برنامه نویسی فراموش شود و یا فقط مقدار دهی داخل تابع مهم است می توانید مقدار های بی معنی به متغیر بدهید مثلا اعداد خیلی بزرگ یا کوچک ولی در C#  راهی وجود دارد که از این سخت گیری های کامپایلر C# خلاص شد کافی است از کلمه کلیدی out قبل از پارامتر استفاده کنید.

* نکته: با کلمه کلیدی out متغیر با روش ارجاع منتقل می شود.

* نکته :نکته ی مهم این است که متغیر i که به صورت out هست باید در ابتدای بدنه متد مقدار دهی اولیه شود.

خب بریم سراغ بررسی کد ها :

الف – فراخوانی با روش مقدار

هنگام گرفتن خروجی ابتدا مقدار اولیه i=5 چاپ می شود و سپس تابع sum فراخوانی می شود و i با مقدار ۵ را به sum ارسال می کنیم.خروجی ۱۰ چاپ می شود و دوباره به دنباله برنامه بر می گردیم.برای اینکه مقدار i را از نظر تغییرات بررسی کنیم یکبار دیگر خروجی می گیریم و مشاهده می کنیم که با اینکه در بدنه تابع sum مقدار i=10 تغییر کرد اما با بازگشت به دنباله برناه مقدار i=5 چاچ خواهد شد(در خط ۴).

ب- فراخوانی با روش ارجاع و استفاده از کلمه کلیدی ref

 

در این روش ابتدا مقدار i=5 هست.هنگام فراخوانی تابع RefSum پارامتر i را به صورت روش ارجاع ارسال می کنیم.برای این کار باید قبل از پارامتر مورد نظر از کلمه کلیدی ref استفاده کنیم(چه در تابع و چه در هنگام فراخوانی).در بدنه این تابع مقدار i=100 تغییر خواهد کرد و خروجی این تابع c=i+b خواهد بود.یعنی مقدار ۱۰چاپ خواهد شد(i=5,b=5).

حالا برای اینکه تغییرات i را در بیرون از RefSum بررسی کنیم یک خروجی از i می گیریم.نتیجه i=100 چاپ خواهد شد.مشاهده کردیم که هنگامی که i=5 را به تابع ارسال کردیم و در داخل RefSum مقدار i به ۱۰۰ تغییر کرد.هنگام خروج از این تابع و بازگشت به برنامه اصلی مقدار i نتیجه آخرین تغییر یعنی ۱۰۰  خواهد بود.

پ- فراخوانی با روش ارجاع و استفاده از کلمه کلیدی out

 

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

در سی شارپ یک قاعده هست و آن اینست که همه ی متغیر ها باید قبل از استفاده(حتی ارسال به عنوان پارامتر به توابع) مقدار دهی اولیه شوند.گاهی شما نیاز به مقدار دهی اولیه ندارید  ویا فقط لازم است که داخل یک تابع مقدار دهی کنید ولی اگر مقدار دهی نکنید کامپایلر خطا خواهد گرفت .گاهی برای خلاص شدن ازاین سخت گیری کامپایلر مقادیر به معنی مثل i=-939339393 می دهید.ولی اینکار غیر اصولی است.از اینجا است که می توانید از کلمه کلیدی out استفاده کنید.

ابتدا  متغیر را تعریف می کنید.برای اینکه نیاز به مقدار دهی اولیه نباشد هنگام ارسال به تابع از کلمه کلیدی out استفاده می کنیم.دیگر نیاز به مقدار دهی اولیه نیست.اما در تابع مذکور باید مقدار دهی اولیه کنید.

* نکته: این کار یک مزیت دارد.فرض کنید کتابخانه ای نوشته اید که در یک کلاس آن یک متد آن را با out نوشته اید.هنگامی که کاربر از کتابخانه شما استفاده می کند و متد شما را فراخوانی می کند اگر پارامتر ی را که به این متد ارسال می کند مقدار دهی اولیه نکرده باشد دیگر دچار خطا نشده است.زیر شما از کلمه کلیدی out استفاده کرده اید و در داخل متد مقدار دهی اولیه کرده اید.

ت- استفاده از کلمه کلیدی params درپارامتر ها

 

گاهی نیاز هست متدی که می نویسید از نظر تعداد پارامتر ها متغیر باشد.راه حل چیست؟؟؟؟

راه حل استفاده از کلمه کلیدی params هست .این کلمه کلیدی امکانی را فراهم می کند که یک آرایه از پارامتر های هم نوع برای شما پدید آید.فرض کنید تابع sum ای نوشتید که جمع تعدادی عدد صحیح را باید حساب کند.چیزی که مهم هست اینست که شما تعداد این اعداد صحیح را نمی دانید.خب حالا طبق کد بالا هم که مشاهده میکنید از کلمه کلیدی params در تابع ParamSum استفاده کرده ایم.حالا شما هر تعداد عدد صحیح که در فراخوانی به عنوان پارامتر ارسال کنید توسط این تابع جمع زده می شود البته در یک foreach.

***** در مورد Optional parameter و Named Paramter ها هم که در سی شارپ ۴٫۰ معرفی شد می توانید در این ویدئو دنبال کنید …. *****

توصیه می کنم برای آشنایی کامل با این مباحث(ref-out-params-Optional Paramter,Named Parameter) در پارامتر های توابع حتما ویدئو ی مربوطه را دانلود کنید.پیشاپیش از انتقادات و پیشنهاد های شما سپاسگزاریم.

 

یک نظر برای "آموزش تصویری سی شارپ – پارامتر های توابع"


  1. مهدی گفت:

    سپاس گذارم بنده تازه سایت شمارا پیداکردم خیلی عالیست لطفا ادامه بدید.متشکرم

ارسال دیدگاه

نام (*)
پست الکترونیکی (*)
وبسایت

There are no products