منو

مفاهیم boxing و unboxing(قسمت سی ام)

مفاهیم boxing و unboxing
لیست جلسات
DatoosTech img Course

قسمت پنجم

دستورات کنسول و متغیرها

DatoosTech img Course

قسمت ششم

نوع های داده اولیه

DatoosTech img Course

قسمت هفتم

عملگرهای زبان سی شارپ

DatoosTech img Course

قسمت هشتم

دستورات کنترلی if else

DatoosTech img Course

قسمت نهم

دستورات کنترلی switch

DatoosTech img Course

قسمت دهم

حلقه for

DatoosTech img Course

قسمت دوازدهم

حلقه while

DatoosTech img Course

قسمت دوازدهم

آرایه ها و دستور foreach

DatoosTech img Course

قسمت سیزدهم

متدها در زبان سی شارپ (بخش اول)

DatoosTech img Course

قسمت چهاردهم

متدها در زبان سی شارپ (بخش دوم)

DatoosTech img Course

قسمت پانزدهم

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

DatoosTech img Course

قسمت شانزدهم

کلاس، اشیاء و فضاهای نام

DatoosTech img Course

قسمت هفدهم

فیلدها و رفتارها

DatoosTech img Course

قسمت هجدهم

Property ها

DatoosTech img Course

قسمت نوزدهم

سازنده ها و روش های ایجاد اشیاء

DatoosTech img Course

قسمت بیستم

وراثت یا Inheritance

DatoosTech img Course

قسمت بیست و یکم

آشنایی با مفهوم Polymorphism

DatoosTech img Course

قسمت بیست و دوم

کلاس های abstract و sealed

DatoosTech img Course

قسمت بیست و سوم

سازنده ها در وراثت، کلمه کلیدی protected و فیلدهای readonly

DatoosTech img Course

قسمت بیست و چهارم

کلاس های static و partial و Extension Method ها

DatoosTech img Course

قسمت بیست و پنجم

Reference Types و Value Types

DatoosTech img Course

قسمت بیست و ششم

آشنایی با کاربرد interface ها

DatoosTech img Course

قسمت بیست و هفتم

مفاهیم Inversion of Control و Dependency Injection

DatoosTech img Course

قسمت بیست و هشتم

Type Casting و انواع Cast ها

DatoosTech img Course

قسمت بیست و نهم

operator overloading و تعریف cast ها

DatoosTech img Course

قسمت سی ام

مفاهیم boxing و unboxing

DatoosTech img Course

قسمت سی و یکم

قابلیت Generics

DatoosTech img Course

قسمت سی و دوم

نکات تکمیلی Generic ها، کلاس List و کلاس Dictionary

DatoosTech img Course

قسمت سی و سوم

استثناء ها (Exceptions) و مدیریت خطاها

مطالب این جلسه
همانطور که در قسمت قبلی گفتیم، در این قسمت قصد داریم تا با مفاهیم Boxing و Unboxing آشنا شویم که مربوط به بحث تبدیل نوع ها به یکدیگر می شود.


Boxing


همانطور که در قسمت های قبلی گفتیم، سی شارپ یک زبان سئ گرا است، یعنی ما می توانیم بوسیله کلاس ها شئ های مورد نظر خود را ایجاد کنیم. بوسیله کلاس ها نوع های داده ارجاعی یا Reference Type ایجاد می شوند. همینطور با struct ها که وظیفه ایجاد Value Type ها را دارند آشنا شدیم. اما کلیه این نوع های داده از نوع داده object ارث بری می کنند، یعنی فرزند نوع داده object هستند که به صورت پیش فرض در کتابخانه دات نت تعریف شده اند. اگر توضیحی بخواهیم برای عملیات Boxing ارائه دهیم، عملیات تبدیل یک Value Type به نوع داده object را boxing می گویند. مثال:

 
            
                int number = 12;
                object boxed = number;
            
        

در کد بالا، ابتدا یک متغیر از نوع int تعریف کردیم و سپس این متغیر را در متغیر دیگری با نام boxed و از نوع object قرار دادیم. به این عملیات boxing گفته می شود. اگر بخواهیم نگاه ریز تری به این پروسه داشته باشیم، عملیات boxing مقدار یک value type که در حافظه stack دخیره شده را داخل یک object و در حافظه heap نگهداری می کند. عملیات boxing را می توان به صورت implicit که در بالا مثال زدیم یا explicit انجام داد:

 
        
int number = 12;
object boxed = (object)number;
            
        


Unboxing


عملیات Unboxing، دقیقاً عکس عملیات boxing است، یعنی ما یک متغیر از نوع object را به Value Type تبدیل کنیم:

 
        
object boxed = 12;
int unboxedNumber = (int)boxed;
            
        

در کد بالا، ابتدا عدد 12 داخل متغیر boxed از نوع object قرار گرفته و در خط بعدی عملیات unboxing انجام می شود، یعنی عدد 12 که از نوع int است و در متغیری از نوع object و در حافظه heap ذخیره شده، به صورت explicit تبدیل به نوع int شده و در متغیری از همین نوع قرار داده می شود. به این نکته دقت کنید که عملیات boxing و unboxing بر روی performance برنامه تاثیر می گذارد و بهتر است تا حد امکان از انجام این گونه تبدیل ها در برنامه خودداری کرد. در قسمت بعدی آموزش، با مبحث Generic آشنا خواهیم شد.