جولای
26
2015

فراخوانی با ارجاع در سی شارپ

هنگامی که شما یک تابع را به صورت عادی صدا می زنید، تمامی آرگومان ها به وسیله ی مقدار فرستاده می شوند یا به عبارت دیگر یک کپی از مقدار آن ها به تابع فرستاده می شود و تغییراتی که توسط تابع روی متغیر انجام می شود در متغیر اصلی تاثیر نمی گذارد. این امر در مورد تایپ های پایه ای سیشارپ کاملا واضح است. اما اگر دقت کرده باشید وقتی یک شئ نمونه از یک کلاس را به عنوان آرگومان ارسال کنید، با تغییر اجزای آن شئ در تابع، این تغییرات در شئ اصلی هم قابل دیدن است. سوال اینجاست که اگر کپی فرستاده شده است پس چرا تغییرات باقی مانده است؟
برای جواب این سوال باید به مفاهیم شئ گرایی مراجعه کرد. هنگامی که شما یک نمونه از یک کلاس ایجاد می کنید، ابتدا در حافظه مکانی برای اطلاعات و اجزای شئ در نظر گرفته می شود و سپس آدرس آن محل در یک متغیر که شما با نام شئ به آن دسترسی دارید، ذخیره می شود. پس چیزی که به عنوان مقدار شناخته می شود، آدرس محل اجزای شئ است. حال وقتی یک شئ را به یک تابع ارسال می کنید این آدرس است که کپی می شود و نه محتویات آدرس. اکنون هر تغییری که در تابع روی شیئی که متغیر مربوطه به آن اشاره می کند، رخ دهد، در همان آدرس ثبت می شود و چون این یک آدرس مشترک است، تغییرات از طریق متغیر اصلی هم قابل دیدن است. دقت کنید که اگر مقدار متغیر یا همان آدرس را در تابع تغییر دهید، هیچ تغییری در مقدار متغیر اصلی ایجاد نمی شود.
حال اگر قصد دارید یک ارجاع واقعی انجام دهید، باید از کلمه کلیدی ref قبل از نام آرگومان مورد نظر (هنگام تعریف و فراخوانی تابع) استفاده کنید.
کلمات کلیدی out و ref هر دو برای فراخوانی با ارجاع استفاده می شوند اما دو تفاوت کاربردی در آن ها وجود دارد:
  • هنگامی که از ref استفاده می کنید، قبل از فراخوانی، متغیر مربوطه حتما باید مقدار دهی شده باشد اما در مورد out اینطور نیست.
  • هنگامی که آرگومان out وجود دارد، قبل از اینکه کار تابع تمام شود، حتما باید به آن متغیر یک مقدار نسبت داده شود در غیر این صورت خطای کامپایل خواهید داشت.
این نکته از آن جهت اهمیت دارد که:
هنگامی که می خواهید از یک تابع چند خروجی با تایپ های مختلف بگیرید از out استفاده کنید. اینکار هم خوانایی را افزایش می دهد و هم از اشتباهات ناخواسته جلوگیری می کند.
بهتر است که:
از این روش تنها موقعی استفاده کنید که مجبورید. گرفتن چندین خروجی از یک تابع می تواند پیچیدگی کد را زیاد و رفع خطای آن را سخت تر کند.

فرستادن دیدگاه

راهنمای دانلود

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

از این که حامی پروژه را برای دانلود انتخاب نموده اید، سپاسگزاریم.

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

HamiProje@Gmail.com

تبلیغات

alibaba02

تقویم شمسی

مهر ۱۴۰۳
ش ی د س چ پ ج
« آذر    
 123456
۷۸۹۱۰۱۱۱۲۱۳
۱۴۱۵۱۶۱۷۱۸۱۹۲۰
۲۱۲۲۲۳۲۴۲۵۲۶۲۷
۲۸۲۹۳۰