Предупреждение компилятора о (неоднозначном) разрешении метода с именованными параметрами
Один вопрос относительно того, должен ли следующий код выдавать предупреждение компилятора или нет (это не так). Он объявляет два метода с одинаковым именем / возвращаемым типом, один имеет дополнительный именованный / необязательный параметр со значением по умолчанию.
ПРИМЕЧАНИЕ. Технически разрешение не является двусмысленным, поскольку в правилах четко указано, что будет вызван первый метод. Смотрите здесь, разрешение перегрузки, третий пункт. Такое поведение для меня тоже интуитивно понятно.
public void Foo(int arg) { ... }
public void Foo(int arg, bool bar = true) { ...}
Foo(42); // shouldn't this give a compiler warning?
Я думаю, что предупреждение компилятора было бы интуитивно понятно. Хотя код технически чистый (будь то звуковой дизайн - это другой вопрос:)).
2 ответа
Я не согласен с тем, что на самом деле нужно предупреждение. Основная проблема заключается в том, что этот код потенциально легитимен, и в этом случае вам придется явно отключить предупреждение.
Я имею в виду, что, в общем, когда вы получаете предупреждение, вы сможете изменить свой код, чтобы избавиться от предупреждения (и, вероятно, сделать код лучше одновременно). Но в этом случае может случиться так, что вы сделали это намеренно и не сможете изменить свой код, чтобы избавиться от предупреждения.
Например, предупреждение "Недоступный код" - это то, что вы можете просто удалить недоступный код, чтобы избавиться от предупреждения. Или предупреждение "Не удалось найти ссылку" - обычно это сигнал о том, что вы получите ошибки "неопределенного типа", но если нет, то вы можете просто удалить ссылку. Или, может быть, предупреждение "Предыдущее предложение catch уже перехватывает все исключения": в этом случае вам нужно изменить код так, чтобы либо новое предложение предшествовало универсальному, либо полностью удалило catch.
Но дело в том, что в каждом случае, когда вы получаете предупреждение, вы должны изменить свой код, и внесение изменений всегда приведет к "лучшему" коду. Однако, в случае этого вопроса, вызов не является двусмысленным (с точки зрения компилятора), и я не думаю, что вы можете утверждать, что всегда писать ошибку подобным образом, поэтому не должно быть предупреждение.
Если компилятор выдает предупреждение о каждом случае, когда вы делаете что-то, что, вероятно, не самая лучшая идея, тогда мы были бы завалены предупреждениями!
Предупреждения должны сообщать программистам о потенциально глупых ошибках. Это область, которая может вызвать глупую ошибку, поэтому да, она должна генерировать предупреждение. Вы пытаетесь сформировать петицию?