مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

تفاوت value type و reference type


نام مقاله : تفاوت value type و reference type

 

سلام میکنم به دوستای گلم امیدوارم حالتون خوب باشه.

امروز در مورد تفاوت value type و reference type قرار صحبت بشه درواقع مبحثی هست که مدام دارید ازش استفاده میکنید اما ممکنه خیلی درش عمیق نشده و از منطق پشت پردش خبر نداشته باشید.

در این مقاله به طور نسبتا ساده و خلاصه به این قضیه میپردازیم.

خب سوالی که ممکنه پیش بیاد اینه که آیا انواعی داده ای نظیر int, float, bool, struct class با هم فرق دارند؟

خب اگر جواب معمولی بخوایم بدیم کاملا واضح هست هر فرد مبتدی هم میدونه فرقشون در ظاهر چیه!

اما باهوشترا تفاوت value type و reference type رو تو چیزای دیگه ای هم می بینن!!!

 

 تفاوت value type و reference type

 

مثلا تا حالا از خودتون پرسیدید که چرا آبجکت های که از class ها ساخته میشه مقدار null میگیرن اماstruct int float bool خیر؟!

 

 خب ما در برنامه نویسی کلا با متغیرها سر و کار داریم و متغیرها درون سخت افزاری به نام ram ذخیره میشن.

درون رم دو بخش برای ذخیره سازی دیتا داریم :

Stack و Heap

استک یک حافظه ی ثابت(استاتیک) ، محدود و بسیار سریع هست.

 

اما هیپ حافظه ای داینامیک و با سایز متغیر و کند تر از استک هست.

 

اما تفاوت value type و reference type  و طراحان زبان برنامه نویسی: زبان برنامه نویسی سی شارپ برای افزایش پرفورمنس و سرعت زبان سی شارپ داده های از نوع اصلی رو که معمولا بیشتر باهاش سر و کار داریم و نیاز هست خیلی سریع اجرا بشن و همچنین ظرفیت محدود و مشخصی دارن رو در بخش استک حافظه ی رم ذخیره میکنن. انواع داده ای مانند  bool,int , double, struct و ...

و نوع های دیگه مثل enum و class رو در حافظه ی heap ذخیره و استفاده میکنند.

 تفاوت value type و reference type

 

 

خب وقتی میگیم value type یعنی متغیر ما از حافظه ی استک استفاده میکنه.

شیوه ذخیره سازی و فراخوانی مقادیر در استک و هیپ متفاوته و بحث مفصلی میطلبه اما فقط اشاره هایی مختصر بهشون میکنیم.

در استک مقدار داده مستقیما در خونه حافظه ذخیره میشه, مثلا:

int me =2

در این مثال مقدار عددی متغیر me که ۲ هست در یکی از خونه های حافظه در بخش استک ذخیره شده و اسم اون خونه me هست.

 

اما وقتی میگیم نوع داده reference type هست یعنی از حافظه ی هیپ استفاده میشه. به عبارت دیگر آدرس خونه حافظه رو در متغیر داریم و نه مقدارش.

فرض کنید متغیری داریم از نوع reference type به اسم var که مقدار "hello" رو میخوایم درش ذخیره کنیم.  اتفاقی که در عمل میفته اینه:

#با توجه به اینکه هر کاراکتر ۱ بایت فضا اشغال میکنه و کلمه hello دارای ۵ کاراکتر هست کلا  ۵ بایت فضا نیاز داره پس خونه ۱۰۰۰ رو تا ۱۰۰۵ رو مقدار دهی کن بدین شکل که در هر خونه یک کاراکتر ، مثلا خونه ۱۰۰۰ h خونه ۱۰۰۱ e تا خونه ۱۰۰۵)

و یک خونه دیگه هم برای ذخیره آدرس استفاده میشه.

 

همچنین اگر مقداری براش تعیین نشه اصطلاحا null یا پوچ خواهد بود که این null بودن رو در value type ها نداریم.

 

به طور خلاصه تفاوت value type و reference type رو میشه اینطور بیان کرد که:

۱-داده های نظیر int float bool  و ... value type هستند.

داده هایی نظیر enumو class از نوع reference هستند و struct از نوع value هستند

۲-در داده های از نوع value  type مقدار داده به طور مستقیم در حافظه ذخیره میشود.

در reference typeها آدرس آن درون حافظه ذخیره میشه و مقدار آن توسط آدرس به طور غیر مستقیم قابل دسترسی هست.

۳-تغییر و انجام هر عملیات روی یک متغیر از نوع reference باعث تغییر سایر متغیرهایی هم میشود که به همان خانه حافظه اشاره میکنند.

اما در value اینگونه نیست.

 

عنوان مقاله : تفاوت value type و reference type

 

نویسنده : اسماعیل بحرانی فرد

فصلِ: 1 , تعداد قسمت ها: 9 , سطح: صفر تا صد
موضوعات: آموزش سی شارپ

این فصل در یک نگاه:

آموزش ارسال پیامک، آموزش ارسال پیامک تکی و گروهی ، ارسال پیامک به صورت اختصاصی برای هر مشترک، دریافت پیامک، مشاهده وضعیت…

توضیحات کلی مجموعه:   آیا می دونید قیمت نرم افزارهای مدیریت پیامک در حدود 150 هزار تومان است؟ اما توسط این دوره شما میتونید با مبلغ بسیار کمتر یک نرم افزار مدیریت پیامک رو به صورت کاملا حر…
فصلِ: 9 , تعداد قسمت ها: 59 , سطح: صفر تا صد
موضوعات: آموزش سی شارپ

این فصل در یک نگاه:

در این فصل که فصل پایانی این دوره می باشد در مورد نحوه ساختن فایل نصبی سریع یا همان quick installer که روش پیشنهاد شده م…

توضیحات کلی مجموعه: پس از بازخوردهای بسیار خوبی که از دوره های آموزش برنامه نویسی سیستم اتوماسیون اداری و آموزش برنامه نویسی سیستم فروش و انبارداری مشاهده کردیم، تصمیم گرفتیم با توجه به درخ…
فصلِ: 13 , تعداد قسمت ها: 120 , سطح: صفر تا صد
موضوعات: آموزش سی شارپ

این فصل در یک نگاه:

در این فصل که فصل آخر از مجموعه بزرگ آموزش سیستم اتوماسیون اداری می باشد در ابتدا در مورد اسناد و نامه های خارج از سازما…

دوره صفر تا صد  آموزش برنامه نویسی و پیاده سازی سیستم اتوماسیون اداری تحت شبکه. (توصیه می شود دومی مجموعه را حتما ببینید) امروزه اطلاعات یکی از مهمترین و با ارزشترین منابع هر اداره و یا ساز…
فصلِ: 4 , تعداد قسمت ها: 14 , سطح: مقدماتی

این فصل در یک نگاه:

توضیح تنظیمات گرافیک و صدا در یونیتی پیاده سازی منو ها …

به نام خدا   بازی‌سازی یک حرفه بسیار جذاب است و تبدیل شدن به یک بازی‌ساز حرفه‌ای آرزوی همه ماست. اینکه بتوانیم دنیای خاصی خلق کنیم و در این دنیا قوانین خود را پیاده کنیم، همیشه ما را به وج…
فصلِ: 11 , تعداد قسمت ها: 92 , سطح: صفر تا صد

این فصل در یک نگاه:

اجرای سیستم روی سیستم، قرار دادن سیستم روی سرور، تعریف Connetion String، آشنایی با فایل App.config، ساخت رشته اتصال به ص…

مهمترین تکنولوژیهای استفاده شده در این دوره پروژه محور (سیستم فروش کالا و انبارداری) طراحی گرافیکی به روش WPF (Windows Presentaion Foundation) آموزش کامل برنامه نویسی xaml (برای طراحی های …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید