مشاهده نسخه کامل
: آیا این کد سودمندی دارد؟
درود و سلام:
به نظرتون آیا استفاده از این کد سودمندی برای ما دارد؟
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
استفاده از آن:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دقیقا بر عکس این هم امکان دارد. تعریف کلاس درون ساختار.
سلام
بله، قابیت جالبی در دات نت است.
دقت کنید که این شیوه کار هیچ تفاوتی در مدل حافظه و مباحث شی گرایی و... ایجاد نمیکند فقط نوعی namespace بندی ویژه است.
کاربرد مناسب این قابلیت مشابه امکان تعریف توابع Private است، مگر اگر همه توابع Private را Public کنیم، باز پروژه کار نخواهد کرد؟ چرا نباید همه توابع را Public یا Internal تعریف کرد؟
این هم خیلی شبیه است ضمن اینکه این ساختار های تودرتو به تمام عناصر (حتی Private) ساختار بالاسری خود دسترسی دارند.
شما میتوانید ساختارهایی را داخل بدنه ساختار دیگر تعریف کنید و حوضه دید های کامل پنجگانه دات نت را به آنها اعمال کنید، بطور نمونه آنها را Private کنید تا فقط توسط ساختار بالاسری قابل استفاده باشند. (یک تعریف خصوصی و محدود به همان محل)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشید.
به نظر خودم این کار ضرر هم دارد.ببنید من میخواهم این کلاس رو به عنوان پارامتر یفرستم برای یک تایع. خوب اگر کلاس باشد ، ادرس کپی میشود و خلاص.
اما در اینجا قسمت ساختار ، کپی میشود. :n35:
سلام
...خوب اگر کلاس باشد ، ادرس کپی میشود و خلاص...
اول جهت روشن شدن بیشتر لازم است تاکید کنم، این شبه ای که شما مطرح میکنید چه درست و چه غلط ارتباطی به تعریف تودوتو که در پست اول مطرح شده بود ندارد و میتواند هرجایی رخ دهد.
دوم میرسیم که پاسخ:
الف) دقیقا کپی شدن هرباره struct ها یک ویژگی خاص است که در محل مناسب میتواند مزیت باشد.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر int یک class بود، x و y هر دو 128 میشدند و ما همچین چیزی نمی خواهیم، اگر کمی دقت کنید، بسیار حالات و شرایط وجود دارد که راحتی و تضمین برنامه ما بر این است که هربار کپی جدیدی ایجاد شود.
ب) struct ها نیاز به تخصیص پویا و پاک سازی پویا ندارند (Garbage Collector)
اشیایی که در هیپ میسازید چون در محل نامشخ new میشوند و هربار هم آدرس کپی میشود، پس باید روشی برای آزاد سازی حافظه آنهایی که دیگر نیازی به آنها نیست داشته باشیم...
سه روش مشخص برای پاک سازی اشیا هیپ وجود دارد...
1) دستور پاک سازی (برعکس new) و بطور کامل به مسئولیت برنامه نویس (مشابه ++C و دستور delete)
2) شمارش تعداد ارجاعات (افزایش و کاهش عددی برای هربار کپی آدرس شی به متغییر جدید) و پاک سازی در صفر شدن تعداد ارجاعات (مشابه اشیا COM)
3) شمارش درلحظه از تعداد ارجاعات به یک شی توسط سرکشی ریسمانی خاص و پاک سازی اشیای فاقد ارجاع (مشابه #C ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) و Java)
همه این اگوریتم ها با دشواری ها و هزینه های گوناگونی همراه است ضمن اینکه بترتیب از اول تا سوم همواره احتمال خطا و نشت حافظه وجود دارد.
ج) تخصیص و پاک سازی پویا اشیا در هیپ موجب fragment شدن RAM میشود، در واقع حافظه تکه تکه میشود و حالتی رخ میدهد که شاید از لحاظ جمع ریاضی حافظه داشته باشید ولی حافظه یک تکه بزرگ برای آرایه یا شی دیگری نداشته باشید و دچار کمبود حافظه شوید.
این مورد در دات نت به کمک ماژول و ریسمانی جهت defrag کردن RAM حل شده و این هم یعنی باز هزینه برای یکپارچه سازی هیپ و هزینه مخفی دیگری به جهت اشاره گر های دو مرحله ای (**void)
(دقت کنید که fragment شدن هارددیسک موجب کندی میشود ولی fragment شدن RAM موجب خطا کمبود حافظه میشود)
و...
class جای خود را دارد و struct هم جای خود، تشخیص صحیح استفاده از هریک میتواند خیلی به برنامه شما کمک کند.
موفق باشید
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.