ОБНОВЛЕНИЕ: Этот вопрос был темой моего блога 12 мая 2011 года. Спасибо за отличный вопрос!
Предположим, у вас есть интерфейс, который вы описываете, и сотня классов, которыереализовать это.Затем вы решаете сделать один из параметров одного из методов интерфейса необязательным.Вы предполагаете, что правильно сделать, чтобы компилятор заставил разработчика найти каждую реализацию этого метода интерфейса и сделать параметр также необязательным?
Предположим, мы это сделали.Теперь предположим, что у разработчика не было исходного кода для реализации:
// in metadata:
public class B
{
public void TestMethod(bool b) {}
}
// in source code
interface MyInterface
{
void TestMethod(bool b = false);
}
class D : B, MyInterface {}
// Legal because D's base class has a public method
// that implements the interface method
Как автор D должен сделать эту работу?Обязаны ли они в вашем мире позвонить автору B по телефону и попросить его отправить им новую версию B, в которой метод имеет необязательный параметр?
Это не полетит.Что если два человека позвонят автору B, и один из них хочет, чтобы значение по умолчанию было истинным, а один из них хотел бы, чтобы оно было ложным?Что, если автор B просто отказывается подыгрывать?
Возможно, в этом случае они должны будут сказать:
class D : B, MyInterface
{
public new void TestMethod(bool b = false)
{
base.TestMethod(b);
}
}
Предлагаемая особенность, кажется, добавляет много неудобств дляпрограммист без соответствующего увеличения представительной мощности.В чем преимущество этой функции, которая оправдывает увеличение затрат для пользователя?