MyTable را شما ایجاد کرده اید. نه ماکروسافت..پس حق این را دارید که هر عمل مجازی که برای آن تعریف شده است انجام دهید..
اما، Label ای که شما حق دسترسی کامل اون را به مصرف کننده کلاس دادید، جزء Class Creator می باشد.. یعنی Label جزئی از تعریف فرم1 شما می باشد.. پس نباید از بیرون، دسترسی های غیر مجاز به آن داشت..
متاسفانه، مشکل همین هست که در پست قبلی هم مطرح کردم..
نمیدونم چرا شما گیر دادی که کسی dispose نکنه، اگر کسی بخواد کنترلی رو در فرم دیگه dispose کنه، مشکل اینه که هنوز مسلط به برنامه نویسی نیست، باید بره برنامه نویسی رو یاد بگیره، و گرنه هیچ کس کلاسهای داخلی یک کلاس بیرونی رو dispose نمیکنه (این یکی از نکات اصلی برنامه نویسی OOP هست)
وقتی شخصی در یک پروژه هم Designer باشد، هم Consumer ، طبیعتا نمی تواند به خوبی، مشکلاتی که ممکن است بر اثر چنین اشتباهاتی ایجاد شود را درک کند.. یا اینکه درک می کند و چون به قول شما، عمل غیر مجازی بر روی آبجکت ها انجام نمی دهد، پس فکر می کند که مشکلی وجود ندارد..
*********
عمل Dispose فقط یک مثال بود.. صرفا بحث سر Dispose کردن یا نکردن نیست...
وقتی شما دستزسی کامل می دهید، یعنی اینکه consumer شما هر عملی که بخواهد می تواند بر سر آبجکت شما بیاورد..
گاهی مواقع، این دسترسی ها نه تنها بر روی خود آبجکت مذکور، بلکه بر روی دیگر آبجکت ها نیز می تواند تاثیر بگذارد و عملکرد آن ها را تحت تاثیر قرار دهد..
نمونه برنامتون را با کمی تغییر آپلود می کنم که ببینید که چه مشکلاتی ممکن است پیش آید..
پس از فشردن دکمه ببر روی فرم2، Button ای که بر روی فرم1 قرار دارد، دیگر قابل دسترسی نخواهد بود..
و همه این مشکلات ، از آنجایی ناشی می شود که consumer کلاس شما، دسترسی به همه خواص آبجکت label را دارد.. و از همه مهمتر این که این نوع دسترسی ها کنترل شده نیست..
مشکل سر خاصیت Text و یا دیگر خواص نیبست... مشکل اینجاست که کلاس X اگر نیاز دارد که بتواند به خاصیت a از آبجکتی دسترسی پیدا کند، نباید این اجازه را داشته باشد که بتواند دیگر خواص اون آبجکت را تحت تاثیر رفتار خودش قرار دهد..
شما دسترسی به خاصیت یک TextBox رو با به اشتراک گذاری پسورد یک سیستم مقایسه میکنید ؟!






پاسخ با نقل قول