Ответ 1
Причина в том, что ваш комментарий просто неверен:
//Обратите внимание, что Derived не обеспечивает реализацию для IContract
Конечно. Следуйте логике.
- Производный должен предоставить публичный член, соответствующий каждому члену IContract.
- Все наследуемые члены базового класса также являются членами производного класса; что определение наследования.
- Поэтому Derived обеспечивает реализацию для IContract; его унаследованный член является членом, который выполняет требование
- Поэтому нет ошибок.
эта функция очень неинтуитивна и делает проверку кода намного сложнее. Как вы думаете?
Я думаю, вы не должны использовать эту функцию, если вам это не нравится. Если вы считаете, что это путано и странно читать код, который использует эту функцию, тогда попросите своих сотрудников, которые используют эту функцию, прекратить это делать.
Как эта особенность отличается от любой другой функции, в которой метод из базового класса используется из производного класса? Существует несколько различных способов, которыми метод из базового класса может использоваться или упоминаться в производном классе - вызовы метода, переопределения, преобразования групп методов и т.д.
Кроме того, это относительно простой, простой случай. Если вы действительно хотите жаловаться на запутывание семантики интерфейса в С#, я бы потратил свое время на жалобу на семантику переопределения интерфейса. Это тот, который действительно, кажется, испекает народную лапшу. Мне всегда нужно искать эту вещь в спецификации, чтобы убедиться, что я правильно понимаю семантику.