متوجه شدم.
همیشه 100 درصد نمیشه به خروجی Decompiler ها اعتماد کرد. کلاس ControlCollection از کلاس ArrangedElementCollection ارث بری داره. کلاس ArrangedElementCollection هم براساس IList پیاده شده. حالا اگر نگاهی به پیاده سازی ArrangedElementCollection بندازی متوجه میشی که خبری از public new virtual Control نیست. بلکه در کلاس ControlCollection عملگر [] که در اصل به ArrangedElementCollection بر می گرده، باز تعریف شده.
در نتیجه مطابق مثال در کلاس Test2 نمی تونی مستقیما عملگر رو باز تعریف کنی چون اصلا این عملگر در Interface تعریف نشده (Interface بر خلاف کلاس base یک پیاده سازی محسوب نمیشه بلکه فقط الگویی برای حفظ ساختار کلاس های مشتق شده به شمار میاد.). اما اگر یه کلاس جدید به اسم Test3 تعریف کنی که از کلاس Test2 ارث بری داشته باشه، کدی که زدی بدون خطا خواهد بود. حتی اگر به شکل صریح بیان کنی که Test3 از IList هم مشتق بشه، در این حالت بازم مشکلی پیش نمیاد چون عملا Test3 با ارث بری از Test2 به شکل ضمنی از IList پیروی می کنه.
موفق باشی
آرمین
Bookmarks