大家都知道酒酿蛋是非常传统的美胸食品产后丰胸产品,醪糟也叫酒酿,是由糯米或者大米经过酵母发酵而制成的一种风味食品,其产热量高,富含碳水化合物丰胸产品燕窝酒酿蛋、蛋白质、b族维生素、矿物质等,这些都是人体不可缺少的营养成分酒酿蛋丰胸方法。其中酒酿中含的醣化酵素,能促进乳房的二次发育,具有美胸的作用燕窝酒酿蛋丰胸
مفاهيم اوليه CLR فريمورک دات نت ( بخش دوم )
اين مطلب از طريق سايت شرکت سخاروش در اختيار شما گذاشته شده است .

مفاهيم اوليه CLR  فريمورک دات نت

مفاهيم اوليه CLR  فريمورک دات نت ( بخش دوم )
در بخش اول اين مقاله به بررسی مفاهيم اوليه CLR ، آشنائی با Runtime و نحوه شروع بکار متدها ، اشاره گرديد . در اين بخش به بررسی نوع ها ی حمايت شده توسط IL و فراخوانی متدها ،  خواهيم پرداخت .

نوع ها ی حمايت شده در
IL
مجموعه ای از نوع ها ی متفاوت در سطح
IL ارائه شده است . نوع های فوق را می توان  مستقيما" و از طريق دستورالعمل های IL  استفاده نمود .برخی از نوع های حمايت شده در IL  عبارتند از :

نوع های فوق ، قابل ارائه در حافظه بوده ولی در ارتباط با پردازش آنان ، برخی محدوديت ها وجود دارد . CLR ، پردازش های  لازم در ارتباط با نوع های  فوق را از طريق يک پشته ارزيابی  ( evaluation stack) که بعنوان بخشی از حالت داده در رابطه با هر متد می باشد ، انجام می دهد .  پشته فوق ، قادر به ارائه يک آيتم با هر اندازه ای می باشد. تنها عمليات مجاز در اين رابطه ، تکثير آنان به حافظه ( و يا از حافظه )  و محاسبه آدرس نوع های تعريف شده توسط کاربر است . تمامی عملياتی که شامل مقادير اعشاری می باشند از يک نمايش داخلی برای ارائه اعداد اعشاری استفاده که به سبک خاصی پياده سازی  شده است ( يک مقدار F ) .
ساير نوع های داده ، بجزء مقاير اعشاری که به آنان اشاره گرديد ، دارای يک اندازه
native می باشند : native int  ، native unsigned int ، مرجع شی ( O ) و اشاره گر مديريت يافته ( &)  . نوع های داده فوق ، مکانيزمی برای CLR بمنظور تاخير در انتخاب اندازه نوع مورد نظر می باشد . مثلا" ، مکانيزم فوق ، اين امکان را فراهم می آورد که  يک native int  بر روی يک ماشين شصت و چهار بيتی ، 64 بيت  و در يک ماشين سی و دو بيتی ،  32 بيت در نظر گرفته شود.
دو نوع از داده های فوق(
native ) ،  بنظر مشابه يکديگر می باشند . نوع O ( با اندازه native و اشاره به شی ) و نوع & ( با اندازه native اشاره گر مديريت يافته ) . يک متغير از نوع O ، به يک شی مديريت يافته ، اشاره و استفاده از آن محدود به دستورالعمل هائی است که با صراحت يک عمليات بر روی يک شی مديريت يافته را انجام  و يا دستورالعمل هائی که متايتا آنان امکان  اشاره به يک شی  مديريت يافته  را اجازه داده باشد، . نوع O ، به خارج از شی  و يا تمام شی اشاره می نمايد . نوع & ، نيزبه يک شی مديريت يافته ، اشاره نموده با اين محدوديت که صرفا" به يک فيلد شی و يا عنصری از بردار ، اشاره خواهد کرد . نوع های  O و & ، توسط CLR رديابی شده و می توانند با توجه به نتايج  جمع آوری اطلاعات زائد ( garbage collection) ، تغيير نمايند .
يکی از موارد خاص استفاده از نوع های
native ، اشاره گرهای غير مديريت يافته است . با اينکه نوع اشاره گره های غيرمديريت يافته را می توان توسط متاديتا ، مشخص نمود ولی  آنان بعنوان native unsigned int در کد IL نشان داده می شوند . بدين ترتيب ، CLR دارای انعطاف لازم بمنظور نسبت دهی يک اشاره گر غيرمديريت يافته به يک فضای آدرس دهی بزرگ و بر روی پردازنده ای است که آن را حمايت ولی الزامی دررابطه با درگير شدن حافظه بمنظور ذخيره سازی مقادير فوق بر روی  پردازنده هائی که دارای قابلیيت آدرس دهی چنين فضای  آدرس دهی بزرگی نمی باشند ، وجود نخواهد داشت .
برخی از دستورالعمل های
IL نيازمند وجود يک آدرس در پشته می باشند ، دستورالعمل های زير : calli    ، cpblk ، initblk  نمونه هائی در اين زمينه می باشند. استفاده از يک نوع native ، قابليت حمل مناسبی در ارتباط با عملياتی که شامل نوع فوق می باشند را فراهم و تضمين می نمايد . در صورتيکه آدرس مشخص شده ، يک عدد 64 بيتی صحيح را مشخص نمايد ،  در ادامه ،قابليت حمل آن در صورت دنبال نمودن مراحل موردنظر بمنظور اطمينان از تبديل مقدار به يک آدرس فراهم می گردد .در صورتيکه يک آدرس بعنوان يک عدد سی و دو بيتی و يا کوچکتر مشخص گردد ، کد هرگز قابل حمل نخواهد بود، ولواينکه ممکن است بر روی اکثر ماشين های سی و دو بيتی امکان اجرای آن وجود داشته باشد.  در اکثر موارد ، رويکرد فوق ، ماحصل نتايج  توليد کننده IL و يا کمپايلر بوده و نمی بايست نسبت به اين موضوع نگران گرديد . در اين رابطه لازم است به اين نکته توجه شود که با استفاده غير صحيح از دستورالعمل ها ، ممکن است قابليت حمل کد ، حذف و عملا" امکان چنين پتانسيل ارزشمندی از يک برنامه و يا بخشی از برنامه نوشته شده ، سلب گردد .

مقادير عددی کوچک ( آنانی که  که کمتر از چها ر بايت می باشند ) ، در زمان لود ( زمانيکه از حافظه در پشته قرار می گيرند ) به چهار بايت تبديل  و در زمان ذخيره سازی محدودتر خواهند شد ( کپی از پشته به حافظه ) . هر نوع عملياتی که شامل يک مقدار عددی کوچک  باشد ،  بعنوان يک عمليات چهار بايتی در نظر گرفته شده و با آن برخورد خواهد شد . دستورالعمل های خاص IL که با نوع های عددی کوچک سروکار دارند عبارتند از :

بعبارت ديگر ، IL صرفا" عمليات علامت دار را حمايت می نمايد . تفاوت بين عمليات علامت دار و بدون علامت ، به نحوه تفسير مقدار برمی گردد. برای عملياتی که نحوه تفسير مقدار مورد نظر حائز اهميت است ،  عمليات انجام شده ،  دارای يک نسخه بدون علامت ويک نسخه علامت دار می باشد  .

منزلگاه مقادير
بمنظور رديابی اشياء ، CLR مفهوم جديدی با نام  محدوده ( منزلگاه ) يک شی را  معرفی نموده است . . منزلگاه شی ، محلی است که مقدار شی ذخيره و می بايست دارای مکانيزمی بمنظور مشخص نمودن  نوع شی توسط کمپايلر JIT ، باشد . زمانيکه يک شی بصورت Reference ( ارسال اشاره گری به شی ) ، پاس داده میشود ، شی فوق ، می بايست دارای يک منزلگاه  باشد، چراکه آدرس منزلگاه  بعنوان مرجع ارسال می گردد . در اين رابطه دو نوع داده وجود داشته که بی خانمان ! ( بدون منزلگاه ) بوده و نمی توان آنان را  بصورت Reference  ارسال نمود : مقادير ثابت و ميانی در پشته ارزيابی از دستورالعمل های IL و يا مقادير برگردانده شده توسط متدها .  CLR  منزلگاه های  زير را در ارتباط با  اشياء حمايت می نمايد :

Method Flow Control
CLR ، مجموعه گسترده ای از دستورالعمل های کنترلی را ارائه می نمايد : 

CLR ، در موارديکه کنترل درون  يک متد منتقل می گردد ، از مجموعه ای قوانين استفاده می نمايد .

فراخوانی متد
CLR ، قادر به فراخوانی متدها با استفاده از سه روش متفاوت است . تفاوت هر يک از روش های فوق صرفا" به روشی که call site descriptor مشخص می نمايد ، بستگی دارد.call site descriptor ، به CLR و موتور JIT اطلاعات کافی در رابطه با فراخوانی متد را ارائه می نمايد. بنابراين، امکان ايجاد  يک فراخوانی native فراهم ، آرگومان های مناسب امکان دستيابی به متد را ايجاد  و اطلاعات مورد نياز بمنظور مراجعت ايجاد می گردد.

روش فراخوانی متد
CLR از يک روش خاص بمنظور فراخوانی در تمامی کد IL استفاده می نمايد. اگر متدی که صدا زده شده است ، متدی مربوط به يک نمونه باشد ،  يک مرجع به نمونه شی مورد نظر بهمراه  هر يک از آرگومانهای متد با اولويت چپ به راست در پشته مستقر می گردند . بدين ترتيب ، اشاره گرفوق ، در ابتدا  توسط متد فراخوانده شده از پشته برداشته شده ( pop ) و  در ادامه نوبت به هر يک از آرگومان ها  خواهد رسيد ( شروع با آرگومان صفر تا آرگومان شماره n ) . اگر متد فراخوانده شده يک متد ايستا باشد ، اشاره گر مرتبط با نمونه شی مربوطه وجود نداشته و پشته صرفا" شامل آرگومانها خواهد بود . برای دستورالعمل calli ، آرگومانها  با اولويت چپ به راست و بدنبال آن  اشاره گر تابع  درون پشته مستقر می گردند .

ارسال پارامتر متدها
CLR، از سه روش متفاوت برای ارسال  پارامتر  ( parameter-passing )  استفاده می نمايد :

در بخش سوم اين مقاله به بررسی Exception Handling خواهيم پرداخت .


استفاده از اين مطلب  با ذکر منبع و اهداف غيرانتفاعی بلامانع است .
http://www.srco.
ir