CSCIENCE

CSCIENCE

سیشارپ - باید دانست 7

دوشنبه, ۴ شهریور ۱۳۹۲، ۰۱:۳۵ ق.ظ
ارجاع یا مقدار؟

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

سیشارپ

C#

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی