PDA

View Full Version : مشکل در پیاده سازی Interface



SajjadKhati
سه شنبه 09 آبان 1396, 14:02 عصر
سلام
چرا در عکس زیر میگه که مقدار بازگشتی ایندکسر درون اینترفیس IList.this[int] رو درست انجام ندادم :

http://s6.uplod.ir/i/00902/mwc3o3cvk481.jpg

ولی در کلاس ControlCollection ، خود مایکروسافت ، همین کار رو کرد؟!

Mahmoud.Afrad
سه شنبه 09 آبان 1396, 19:14 عصر
متن خطا گویاست. مقدار بازگشتی باید Object باشد.

SajjadKhati
سه شنبه 09 آبان 1396, 21:58 عصر
متن خطا گویاست. مقدار بازگشتی باید Object باشد.

ممنون
میدونم
سئوالم رو کامل متوجه نشدید
منظورم این بود پس چرا در کلاس System.Windows.Forms.Control.ControlCollection که یک ایندکسر تعریف و همین اینترفیس IList رو پیاده سازی کرد ، نوع خروجی رو بجای object ، تونست control بگیره؟

SajjadKhati
چهارشنبه 10 آبان 1396, 13:17 عصر
سلام
کسی میدونه؟
عجله دارم

mr.sirwan
چهارشنبه 10 آبان 1396, 15:01 عصر
با سلام دوست عزیز، شما باید از نوع جنریک اینترفیس IList استفاده کنین و نوعی که مدنظرتون هست رو بهش بدین، برای مثال تو مورد شما باید نوع کلاس Control رو بهش بدین و پیاده سازی رو انجام بدین

SajjadKhati
چهارشنبه 10 آبان 1396, 17:22 عصر
با سلام دوست عزیز، شما باید از نوع جنریک اینترفیس IList استفاده کنین و نوعی که مدنظرتون هست رو بهش بدین، برای مثال تو مورد شما باید نوع کلاس Control رو بهش بدین و پیاده سازی رو انجام بدین

سلام
ممنون
خود کلاس ControlCollection که از اینترفیس جنریک IList استفاده نکرد
جنریک اش هم پیاده سازی کردم ولی بازم ارور میده

mr.sirwan
چهارشنبه 10 آبان 1396, 21:38 عصر
سلام مجدد
میشه منطق اینکارتون رو توضیح بدین؟ شاید راه بهتر و اصولیتری باشه که به هدفتون برسین

SajjadKhati
چهارشنبه 10 آبان 1396, 22:14 عصر
ممنون . دلیل اش رو پیدا کردم
فکر میکردم که مستقیما در کلاس ControlCollection ، اینترفیس IList.this[int] رو پیاده سازی کرده که منم میخواستم همین کار رو کنم ولی این طور نبود :

دلیل اش اینه که کلاس ControlCollection ، از کلاس ArrangedElementCollection ارث بری میکنه و این کلاس ، عضو ایندکسر در اینترفیس IList رو پیاده سازی کرد . پس دیگه نیازی به پیاده سازی در کلاس فرزندش یعنی ControlCollection نداره .

http://barnamenevis.org/attachment.php?attachmentid=146949&stc=1&d=1509563634



در کلاس ControlCollection ، اون ایندکسر

public new virtual Control this[int index]

که hide میکرد ایندکسر

internal virtual IArrangedElement this[int index]
در کلاس ArrangedElementCollection و ایندکسر

public virtual Control this[string key]

هم که اورلودی بود برای ایندکسر دیگه در همون کلاس ControlCollection (همون ایندکسری که در خط بالا گفته شد)
ممنون