PDA

View Full Version : سوال: دوستان این کد چه معنی میده و برای چی استفاده میشه؟



Amirtvr
سه شنبه 19 فروردین 1399, 11:18 صبح
private System.ComponentModel.Container components = null;

the king
سه شنبه 19 فروردین 1399, 12:23 عصر
private System.ComponentModel.Container components = null;

هر شیء Dispose شدنی باید موقعی که استفاده ای نداره Dispose بشه. این یک قاعده کلی است.
مسئولیت آزاد کردن اون اشیاء ای که خودتون با کد نویسی ایجاد می کنید با خودتونه، اونها تکلیف شون معلومه.
اما اون اشیاء ای که در محیط ویژوال و با کمک Designer ویژوال استدیو ایجاد می شوند، مثلا Button ای که با ماوس Drag کردید و روی فرم قرار داده اید، با کدی که Designer ویژوال استدیو بصورت خودکار می نویسه ایجاد میشه و باید خودش هم مسئولیت Dispose شدنش رو قبول کنه. مسئولیت Dispose شدنش با شما نیست.

Designer باید یک لیست از اون اشیاء که خودش ایجاد کرده رو داشته باشه تا موقع Dispose کردن بدونه کدوم اشیاء باید آزاد بشوند.
در مورد اشیاء ای که به عنوان Control روی فرم قرار میگیرند روال کار ساده است، چون همه شون زیر مجموعه ای Form.Controls هستند، اما اون اشیاء ای مثل Timer صرفا Component هستند، Control نیستند که زیر مجموعه Controls فرم باشند. واقعا روی فرم قرار نمی گیرند. برای همین از طریق خود شیء Form دسترسی پیدا کردن بهشون میسر نیست.

اون فیلد components دقیقا کاربردش همینجا است. لیست Component هایی رو نگه میداره که به اون Form مربوط هستند و باید Dispose بشوند.
با Dispose شدن فرم اونها هم با بررسی اعضاء components پیدا می شوند.
هر کمپوننت ای که Designer برای اون کلاس فرم ایجاد می کنه و Dispose شدنش لازمه، باید در این components که یک مجموعه است درج بشه.
مقدار پیشفرض اش null ئه و مادامی که شما کمپوننت خاصی به فرم اضافه نکرده باشید هم null میمونه، اما وقتی فرضا یک Timer روی فرم قرار دادید، یک سطر کد بصورت خودکار به متد InitializeComponent اضافه میشه که برای اون components شی Container میسازه و دیگه null نمی مونه.

Container یک مجموعه است که میشه داخلش Component ها رو درج کرد، و هر زمان خودش Dispose بشه اون اعضاء رو هم Dispose میکنه.
موقعی که فرم میخواد Dispose بشه با یک کدی که Designer برای متد Form.Dispose می نویسه components رو Dispose میکنه.

اگر این components نبود با بستن فرم اشیاء ای مثل Timer همونطور Dispose نشده رها می شدند.