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

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 3 از 3

نام تاپيک: using در منابع مدیریت نشده

  1. #1
    آخر فروم باز
    تاريخ عضويت
    Jul 2009
    پست ها
    6,351

    پيش فرض using در منابع مدیریت نشده

    سلام
    وقتی using به کار ببریم در اصل همان try catch Finally هست متها به صورت اتوماتیک به جای صریح!
    حال برای کار با فایل ها ما متد Dispose رو اصلا اعلان نکردیم.چطوری عمل میکنه؟ منظورم اینه که بلاخره اید Dispose پیاده سازی بشه حالا طرز استفاده اش با به صورت ساختار try finally میهش یا using اما اینجا اصلا پیاده نکرده.چطور منبع ازاد میکنه?
    آیا داخل خود کلاس FileStream متد Dispose رو خودش نوشته و منابع دریافت شده به صورت خودکار آزاد میشه؟
    وقتی از using استفاده کردیم نیاز هست suppresfinilize هم فراخوانی کنیم؟ (کی نیاز هست GC.SuppressFinilize رو فراخوانی کنیم؟-> وقتی که بخواهیم دیگه زباله روب دوباره سعی در ازاد کردن منبع نکنه چون به صورت صریح ازاد کردیم منبع رو؟)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  2. این کاربر از Life24 بخاطر این مطلب مفید تشکر کرده است


  3. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    برای استفاده از using کلاس ما باید واسط IDisposable پیاده سازی کند.
    (که میدانیم واسط مذکور فقط یک متد بدون ورودی و خروجی به نام Dispose دارد.)

    در #C به دو شکل صریح و ضمنی میتوان یک واسط را پیاده سازی کرد و تا آنجا که به دات نت مربوط است برای او تفاوتی ندارد!
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    همانطور که شماهده میکنید در نوع ضمنی هیچ اشاره ای به واسط مرتبط با متد نوشته نمیشود و کامپایلر #C بطور خودکار و فقط از روی نام و امضای متد تشخیص میدهد که متدپیاده سازی شده همان متد واسط است.
    در این شیوه باید متد مذکور public و دقیقاً هم نام متد واسط باشد.

    در شیوه صریح، خود برنامه نویس به صراحت ذکر میکند که در حال پیاده سازی فلان متد از فلان واسط است، ولی این شیوه تعریف متد بدون cast غیر قابل دستابی می باشد. (بعداً از این نوع صریح میتوان به پیاده سازی با نام دلخواه هم رسید)

    اگر بخواهید دستی در کدتان متد را فوراً فراخوانی کنید شاید برای شما فرق کند:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ولی در کلیه موارد دیگر هیچ تفاوتی نمیکند، مثلاً کدهای زیر هم برای Class1 و هم Class2 به درستی کامپایل و کار میکند که برای جلوگیری از دوبار نوشتن کدها من از نام Class12 استفاده کردم:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کی نیاز هست GC.SuppressFinilize رو فراخوانی کنیم؟
    نیاز نیست! خودتان را درگیرش نکنید.
    اگر از منابع unmanaged و نگه داری دستگیره های مربوطه مانند hIcon, hWnd, hBitmap, hConsoleInput, hFile و... آنهم در سطح متغییرهای کلاس استفاده نمیکنید، اصلاً متد Finilize کلاستان را override نکنید، آنگاه معنی و نیازی به GC.SuppressFinilize هم نخواهید داشت.

    متدفوق به جمع آوری کننده حافظه هرز اطلاع میدهد که در زمان جمع آوری یک شی نیاز به اجرای متد Finilize و اجرای کدهای خاص سفارشی (#C یا VB.Net و...) نیست.
    به بیان دیگر ما کار اضافه ای نداریم که بخواهیم زمان جمع آوری اجرا شود و نیاز نیست ما را مطلع کند.
    شب خوش.
    Last edited by _H2_; 11-02-2014 at 19:49.

  4. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  5. #3
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    متاسفانه یک مورد را در مطالب قبلی سریع پاسخ دادم و اشتباه کردم...
    نقل قول نوشته شده توسط _H2_
    کلاس FileStream واسط IDisposable بطور صریح (مشابه Class2 کدما) پیاده سازی کرده.
    با توجه به اینکه از پست اول فوراً برداشت کردم متد Dispose را در FileStream مشاهده نکرده اید، سریع به ذهنم رسید حتماً پیاده سازی صریح داشته ....
    ولی ساعاتی بعد از ارسال پست خودم یادم آمد که کلاس FileStream که وراثت کلاس Stream و ... شرمنده!
    بهرحال بدین وسیله عضرخواهی و اصلاح میکنم:

    کلاس FileStream وراثت کلاس Stream است و بطور ضمنی واسط IDisposable را پیاده سازی کرده
    (از کلاس پایه خود به ارث برده و متد بسیار مشابه ای را برای عملیات خود بازتعریف کرده)

    ==============

    بدلیل عدم پشتیبانی p30 از تگ strike در bbcode متن اشتباه از پست قبلی حذف شد.

  6. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •