آیا به نظر شما این کار با منطق OOP جور در میاد ؟ یعنی مشکلی نیست اگه من myTable رو dispose کنم ؟ در صورتی که ممکنه جای دیگه از اون استفاده شده باشه ؟MyTable را شما ایجاد کرده اید. نه ماکروسافت..پس حق این را دارید که هر عمل مجازی که برای آن تعریف شده است انجام دهید..
در ضمن، مگه کنترلی که روی فرم میکشم رو خودم ایجاد نکردم ؟
من دسترسی فقط در حیطه ی همون Assembly رو دادم (Internal)، در ضمن شما امتحان کن ببین با Public کردن دسترسی یک کنترل، در فرم دیگه میتونی مقدار Text اونو تغییر بدی یا Dispose کنی.اما، Label ای که شما حق دسترسی کامل اون را به مصرف کننده کلاس دادید، جزء Class Creator می باشد.. یعنی Label جزئی از تعریف فرم1 شما می باشد.. پس نباید از بیرون، دسترسی های غیر مجاز به آن داشت..
در ضمن کلاس Label برای کلاس فرم، حکم همون کلاس DataTableCollection,... رو داره برای کلاس DataSet، مگه DataTableCollection خارج از جزء Class Deigner در DataSet هست ؟
اینکه بر روی هر آبجکتی ممکنه اثر بذاره، کاملا بستگی به منطق برنامه و کدنویسی و شیوه ی طراحی نرم افزار داره، شما میتونی با چاقو هم میوه پوست بکنی و هم آدم بکشی، دلیلی نداره با تغییر دسترسی یک کنترل بدبینانه به موضوع نگاه کنیم و همه ی نیزه ها رو به سمت Class Designer بچرخونیم، من برنامه ی شما کمی تغییر دادم تا ببینید این شیوه کاملا بستگی به منطق برنامه نویسی داره، کدی که در رویداد فرم 2 اجرا میشه، در فرم1 هم همون نتیجه رو داره، ربطی به دسترسی کنترل نداره، هدف و شیوه ی کدنویسی اشتباهه.گاهی مواقع، این دسترسی ها نه تنها بر روی خود آبجکت مذکور، بلکه بر روی دیگر آبجکت ها نیز می تواند تاثیر بگذارد و عملکرد آن ها را تحت تاثیر قرار دهد..
نمونه برنامتون را با کمی تغییر آپلود می کنم که ببینید که چه مشکلاتی ممکن است پیش آید..
پس از فشردن دکمه ببر روی فرم2، Button ای که بر روی فرم1 قرار دارد، دیگر قابل دسترسی نخواهد بود..
و همه این مشکلات ، از آنجایی ناشی می شود که consumer کلاس شما، دسترسی به همه خواص آبجکت label را دارد.. و از همه مهمتر این که این نوع دسترسی ها کنترل شده نیست..
اولا من دسترسی public ندادم، ثانیا چند خط قبل گفتم، شما ببین اگه دسترسی Textbox رو در فرم 1 publicفرق نمیکنه، اگر قرار است که یک چیزی فقط مطعلق به یک شیئ باشد (چه کاربر و یا چه برنامه) وقتی که دسترسی بهش پابلیک باشد، یعنی اینکه دارد آگهی میده که از هر جایه برنامه بهش دسترسی کنند. اتفاقا مثال خوبی است که چرا با اینکه یک مدیر یک سیستم اگر بخواد میتواند پسورد کاربر را عوض کند ولی هنوز پسورد کاربر فقط باید برایه کاربر محفوظ بماند.
کنی میتونی با این کد مقدار Text اونو از فرم 2 عوض کنی :
objForm1.textBox1.Text = "Changed! from Form2";





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