سلام
چرا در عکس زیر میگه که مقدار بازگشتی ایندکسر درون اینترفیس IList.this[int] رو درست انجام ندادم :
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
ولی در کلاس ControlCollection ، خود مایکروسافت ، همین کار رو کرد؟!
سلام
چرا در عکس زیر میگه که مقدار بازگشتی ایندکسر درون اینترفیس IList.this[int] رو درست انجام ندادم :
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
ولی در کلاس ControlCollection ، خود مایکروسافت ، همین کار رو کرد؟!
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
|
با سلام،
سجاد جان؛ بنده دقیقا متوجه نشدم که میخواستی چیکار کنی؟! اگه یک لینک هم از مثال مایکروسافت در مورد ControlCollection می ذاشتی بد نبود چون چیزی پیدا نکردم.
اگر منظورت پیاده سازی همچین چیزی بود:
که بشینیم با هم بحث کنیم. در غیر این صورت لطفا بیش تر مشکل رو توضیح بده.کد:object IList.this[int index] { get { return new Control(); } set { } }
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
SajjadKhati (01-11-17)
ممنون آقا آرمین
ببینید ، در نرم افزار IL.Spy ، در کلاس ControlCollection ، این کد رو موقع پیاده سازی ایندکسر از اینترفیس IList نشون میده :
برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
من هم یه کلاس ساختم و همین حالت رو خواستم پیاده سازی کنم ، ولی اروری که در پست اول رو که گذاشتم ، بهم داد
چرا و چجوری میشه مثل چیزی که مایکروسافت در کلاس ControlCollection نوشت رو پیاده سازی کرد؟
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
متوجه شدم.
همیشه 100 درصد نمیشه به خروجی Decompiler ها اعتماد کرد. کلاس ControlCollection از کلاس ArrangedElementCollection ارث بری داره. کلاس ArrangedElementCollection هم براساس IList پیاده شده. حالا اگر نگاهی به پیاده سازی ArrangedElementCollection بندازی متوجه میشی که خبری از public new virtual Control نیست. بلکه در کلاس ControlCollection عملگر [] که در اصل به ArrangedElementCollection بر می گرده، باز تعریف شده.
در نتیجه مطابق مثال در کلاس Test2 نمی تونی مستقیما عملگر رو باز تعریف کنی چون اصلا این عملگر در Interface تعریف نشده (Interface بر خلاف کلاس base یک پیاده سازی محسوب نمیشه بلکه فقط الگویی برای حفظ ساختار کلاس های مشتق شده به شمار میاد.). اما اگر یه کلاس جدید به اسم Test3 تعریف کنی که از کلاس Test2 ارث بری داشته باشه، کدی که زدی بدون خطا خواهد بود. حتی اگر به شکل صریح بیان کنی که Test3 از IList هم مشتق بشه، در این حالت بازم مشکلی پیش نمیاد چون عملا Test3 با ارث بری از Test2 به شکل ضمنی از IList پیروی می کنه.
موفق باشی
آرمین
آخرین ویرایش توسط ravegoat در تاریخ 01-11-17 انجام شده است علت: نگارشی
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
SajjadKhati (01-11-17)
ممنون استاد آرمین برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
پس دلیل اش اینه که در کلاس ArrangedElementCollection ، اون ایندکسر IList رو پیاده سازی کرده
اینم تازه فهمیدم که وقتی در کلاسی ، یه اینترفیس رو پیاده سازی کنیم ، دیگه وقتی در فرزندان اون کلاس دوباره از همون اینترفیس ارث بری کنیم ، لازم به پیاده سازیش نداره
دانلود فیلم آموزش برنامه نویسی Visual Studio C#.Net
وقتی انسان ، حیوان هست ، پس قیمت میتونی براش بذاری ولی وقتی انسان حَیّ مُتِاَلِّه هست که قیمت نداره ، بها داره. "دکتر حسن عباسی"
ravegoat (02-11-17)
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks