PDA

View Full Version : سوال: پیاده سازی Dispose



irpersian20
پنج شنبه 23 مرداد 1393, 18:25 عصر
سلام
من در چند مثال دیدم برای فراخوانی Dispose این طوری عمل شده
((IDisposable)c).Dispose();
C هم نام کلاسمون بوده و c هم یک شی از اون هست.
حالا سوال اینجاست. Interface سراسر تعریف متد هست بدون کد.
الان این به صورت صریح به IDisposable تبدیل شده و Dispose فراخوانی شده. این Dispose که هیچ پیاده سازی ازش انجام ندادیم. چطور کار میکنه و منابع رو میتونه آزاد کنه؟
اصلا فرضا Dispose جمع 2 تا عدد رو انجام بده! اما تبدیل شده به اینترفیس و این متد داخل اون اینترفیس هست و اینترفیس هم یک مشت متد بدون تعریف . چطور کار امجام میده؟

Mahmoud.Afrad
پنج شنبه 23 مرداد 1393, 18:39 عصر
در این مثال متد Dispose به شرطی قابل اجرا هست که کلاس C اینترفیس IDisposable را پیاده سازی کرده باشد و لازمه این پیاده سازی اینه که متد Dispose در کلاس C ایجاد شده باشه.
در این مثال c به صورتی عمل میکنه که IDisposable میگه. یعنی باید متد Dispose وجود داشته باشه حالا یا در کلاس C یا احیانا در کلاس والد کلاس C. اگر متد Dispose پیاده سازی نشده باشه خطای زمان اجرا بوجود میاد.

در این حالت چون c شئ با قابلیت Dispose هست پس عمل cast عملی اضافه به نظر میاد.

اگر کلاس C دارای متد Dispose نیست کد قرار بدید تا تست کنم.