PDA

View Full Version : سوال: private کردن بیس یک کلاس



Mrs.Net
جمعه 19 مهر 1387, 20:12 عصر
فرض کنید کلاس child از کلاس base ارث میبره:

class Child : Base
{
}
داخل کلاس بیس تعدادی متد و پارامتر بصورت پابلیک تعریف شده که به سورس این کلاس دسترسی ندارم
آیا راهی وجود داره که شی تعریف شده از کلاس چایلد نتواند به متدها و پارامترهای کلاس بیس دسترسی داشته باشد؟
درواقع راهی وجود دارد که کلاس بیس بصورت private در کلاس child تعریف شده باشد؟

محمدامین شریفی
جمعه 19 مهر 1387, 23:59 عصر
دوست خوبم به منظر من منظور از وراثت یعنی به ارث رسیدن متد ها و کلاس های پدر به والد.
اگر متدی که در والد آمده باشد و بخاهی تغییرش بدهی باید override کنی.
منظور دیگری داری؟

Mrs.Net
شنبه 20 مهر 1387, 08:08 صبح
وقتی یک کلاس بر پایه ی کلاس TextBox میسازید. تمام متدها و پارامترها در کلاس جدید قابل دسترسی هست.

class MyClass : TextBox
{
}

MyClass obj = new MyClass();
obj.Clear(); // This method come from TextBox
سوال من این هست:
حالا از چه راهی میشه کاری کرد که دیگه شی obj به متد Clear که برای تکست باکس هست دسترسی نداشته باشه؟
(کلاس تکست باکس تعداد زیادی متد داره که برای همه اشون میخوام این اتفاق بیافته)

ممنون

SMRAH1
شنبه 20 مهر 1387, 08:32 صبح
پیشنهاد می کنم یک User Control بسازید که فقط شامل یک TextBox باشد.حالا هر متد و property که می خواهید در اختیار استفاده کنده باشد را پیاده سازی کنید (در حد اینکه پارامتر ها را بگیر و به TextBox بفرستد) و هر کدام را نمی خواهد،پیاده سازی نکنید.

محمدامین شریفی
شنبه 20 مهر 1387, 09:31 صبح
پیشنهاد می کنم یک User Control بسازید که فقط شامل یک TextBox باشد.حالا هر متد و property که می خواهید در اختیار استفاده کنده باشد را پیاده سازی کنید (در حد اینکه پارامتر ها را بگیر و به TextBox بفرستد) و هر کدام را نمی خواهد،پیاده سازی نکنید.
منم فکر کنم بهترین راه باشد.

Microsoft.net
شنبه 20 مهر 1387, 10:28 صبح
فرض کنید کلاس child از کلاس base ارث میبره:

class Child : Base
{
}
داخل کلاس بیس تعدادی متد و پارامتر بصورت پابلیک تعریف شده که به سورس این کلاس دسترسی ندارم
آیا راهی وجود داره که شی تعریف شده از کلاس چایلد نتواند به متدها و پارامترهای کلاس بیس دسترسی داشته باشد؟
درواقع راهی وجود دارد که کلاس بیس بصورت private در کلاس child تعریف شده باشد؟

با فرض صورت مساله راه حل جالبي وجود نداره ؛ در زبانهاي #C و VB.net وراثت به صورت كامل انجام ميشه ولي در گذشته زبانهايي بودند كه وراثت چندگانه رو پشتيباني ميكردند كه بعدها به علت بوجود آوردن پيچيدگيهايي در ساخت و پياده سازي كامپايلرها امروزه كمتر زبانهايي ازش پشتيباني ميكنند

Mrs.Net
شنبه 20 مهر 1387, 11:45 صبح
پیشنهاد می کنم یک User Control بسازید که فقط شامل یک TextBox باشد.در این صورت باید متدهای یوزرکنترل هم مخفی کنم که همون حالت پیش میاد.



نقل قول: private کردن بیس یک کلاس
نقل قول:
نوشته شده توسط Mrs.Net http://barnamenevis.org/forum/images/buttons/viewpost.gif (http://barnamenevis.org/forum/showthread.php?p=611506#post611506)
فرض کنید کلاس child از کلاس base ارث میبره:
کد:
class Child : Base{}
داخل کلاس بیس تعدادی متد و پارامتر بصورت پابلیک تعریف شده که به سورس این کلاس دسترسی ندارم
آیا راهی وجود داره که شی تعریف شده از کلاس چایلد نتواند به متدها و پارامترهای کلاس بیس دسترسی داشته باشد؟
درواقع راهی وجود دارد که کلاس بیس بصورت private در کلاس child تعریف شده باشد؟

با فرض صورت مساله راه حل جالبي وجود نداره ؛ در زبانهاي #C و VB.net وراثت به صورت كامل انجام ميشه بله همینطوره

محمدامین شریفی
شنبه 20 مهر 1387, 12:29 عصر
با فرض صورت مساله راه حل جالبي وجود نداره ؛ در زبانهاي #C و VB.net وراثت به صورت كامل انجام ميشه ولي در گذشته زبانهايي بودند كه وراثت چندگانه رو پشتيباني ميكردند كه بعدها به علت بوجود آوردن پيچيدگيهايي در ساخت و پياده سازي كامپايلرها امروزه كمتر زبانهايي ازش پشتيباني ميكنند
منظور شما اینست که دات نت از وراثت چندگانه پشتیبانی نمیکند؟
(ببخشید اگه پرسش خارج از موضوع است،ولی در حقیقت کمک میکند به پیدا کردن بهترین راه حل).
ولی همون custom control به نظر من راه حل خوبی هست

SMRAH1
شنبه 20 مهر 1387, 13:00 عصر
در این صورت باید متدهای یوزرکنترل هم مخفی کنم که همون حالت پیش میاد.

منظورت رو نمی فهمم.در این حالت شما متدهایی از User Control رو که نمی خواهید کاربر به اونها دسترسی داشته باشه یا Protect میکنی یا Private (در این حالت کلاسهای مشتق شده هم دسترسی ندارند).
برای User Control هم فقط Property های مد نظرتون از textBox رو قرار میدید.

Microsoft.net
شنبه 20 مهر 1387, 15:25 عصر
منظور شما اینست که دات نت از وراثت چندگانه پشتیبانی نمیکند؟
(ببخشید اگه پرسش خارج از موضوع است،ولی در حقیقت کمک میکند به پیدا کردن بهترین راه حل).
ولی همون custom control به نظر من راه حل خوبی هست

خير ! همونطور كه عرض كردم به علت مشكلاتي كه اين تكنيك در كامپايل و طرح بندي حافظه ايجاد ميكرد در زبانهاي نوين امروزي كمتر مورد پشتيباني قرار مي گيره . خيلي از نظريه پردازان هم اشكالايي به وراثت چندگانه گرفته اند و از نظر تئوري هم اونو زير سوال برده اند