PDA

نسخه کامل مشاهده نسخه کامل : پیاده سازی Dispose



Life24
08-11-2013, 22:46
سلام
این متد dispose به نظرم کار خاصی انجام نمیدهد،ما خودمون هم میتونیم اون رو پیاده سازی کنیم.
چرا حتما از اینترفیس IDisposable استفاده کنیم؟ اصلا اسم این متد رو بزاریم Test و همین کار رو برامون انجام میده.

_H2_
09-11-2013, 00:30
سلام

من میتوانم یک وسیله برقی بسازم که بجای دو شاخ، یک سر پنج شاخ متفاوت داشته باشد! آخه دو شاخ چه چیز خاصی دارد؟
یا
من میتوانم یک پرینتر یا حافظه فلش بسازم که بجای سر چهار سر usb2 یک سر جدید با شکل دلخواه خودم داشته باشد! سرش usb باشد چه مزیتی دارد؟
یا
من میتوانم یک شیر آب بسازم که قطر دهانه لوله ورودی آن 7 سانت باشد! مگر قطر موجود لوله ها چه مزیتی دارد؟
یا
من میتوانم آنتنی بسازم که فیش سرش یک شکل کاملاً جدید داشته باشد! ...؟

شکل دو شاخ، شکل سر usb، قطر لوله آب، شکل فیش آنتن، شکل و ابعاد فیش هدفون و... و... چیز خاصی ندارند، تکنولوژی نیستند!
یک دوشاخ یا یک فیش که چیز خاصی ندارد، خالی است، تنها مزیتش استاندارد سازی است.

IDisposable فقط یک interface است
interface ها فاقد هرگونه کد یا بدنه اجرایی هستند.
آنها ایجاد میشوند تا همانطور که خودتان گفتید، تا ما خودمان آن ها را پیاده سازی و برایشان کد بنویسیم.
درست عین فیش 3.5mm سر هدفون که هیچ چیز خاصی ندارد، فقط ایجاد شده تا هر وسیله ای که توانایی پخش صوت را دارد آن را داشته باشد تا بتواند تحت یک پروتکل و استاندارد واحد به وسایلی که صوتی را ارائه میکنند وصل شود.

اگر شما به قصدی مشابه IDisposable رابط و متد جدیدی ساخته و از آن استفاده کنید، مانند آن است که هدفونی بسازید و سرش یک فیش 3.6mm وصل کنید!
ایرادی ندارد ولی دیگر استاندارد نیست و در تعامل با تجهیزات دیگر کار نخواهد کرد.

مثلاً دستور using در #C و VB میتواند برای تعریف اشیایی که IDisposable را دارد استفاده شود.
اگر شما از اینترفیس و تابع خودتان استفاده کنید، دیگر نمیتوانید از using روی تعریف متغییر کلاس تان استفاده کنید.
اگر کلاسی بنویسید و آن را منتشر کنید، کسی نمیفهمد و نمیداند که کلاس شما (منابعی را در خارج از CLR و مستقیما در سطح سیستم عامل مصرف کرده) در زمان پایان استفاده اش نیاز دارد که حتماً فلان متدش اجرا شود.

1)
شما وقتی IDisposable را در کلاستان پیاده سازی میکنید، بلند و واضح دارید میگویید این کلاس منابع خارجی را در سطح سیستم عامل استفاده میکند (مانند فایل و سوکت و ارتباط دیتابیس و...) و به استفاده کننده میگویید که بدان! باید در پایان استفاده از این کلاس Dispose اش کنی!

2)
یک فیش استاندارد را به کلاس خودتان متصل کرده اید و به کلاستان امکان تعامل و تبادل با سایر کدهای تولید شده قبل و بعد را داده اید.
(شاید کسی قبلا/بعدا بخواهد کلاس List سفارشی بنویسد که بتواند در زمان Clear در صورت لزوم منابع تمام عناصرش را هم آزاد کند، کد این فرد فقط در حالتی میتواند با کلاس شما هم تعامل داشته باشد که شما استاندارد را رعایت کرده باشید)

کلام آخر
interface ها در زبان برنامه نویسی #C مشابه فیش ها و سوکت ها در دنیای الکترونیک هستند.
شب خوش