предупреждение компилятора о (неоднозначном) разрешении метода с именованными параметрами - PullRequest
6 голосов
/ 17 апреля 2010

Один вопрос относительно того, должен ли следующий код выдавать предупреждение компилятора или нет (это не так).Он объявляет два метода с одним и тем же именем / возвращаемым типом, один имеет дополнительный именованный / необязательный параметр со значением по умолчанию.

ПРИМЕЧАНИЕ.позвонить.См. здесь, разрешение перегрузки, третий пункт маркированного списка .Это поведение также интуитивно для меня, без вопросов.

public void Foo(int arg) { ... }

public void Foo(int arg, bool bar = true) { ...} 

Foo(42); // shouldn't this give a compiler warning?

Я думаю, что предупреждение компилятора было бы здесь интуитивно понятно.Хотя код технически чистый (будь то звуковой дизайн, это другой вопрос:)).

Ответы [ 2 ]

1 голос
/ 20 апреля 2010

Я не согласен с тем, что на самом деле нужно предупреждение.Основная проблема в том, что этот код потенциально законный, и в этом случае вам придется явно отключить предупреждение.

Что я имею в виду, в общем, когда вы получаете предупреждение,Вы сможете изменить свой код, чтобы избавиться от предупреждения (и, вероятно, сделать код лучше одновременно).Но в этом случае может случиться так, что вы сделали это намеренно и не сможете изменить свой код, чтобы избавиться от предупреждения.

Например, предупреждение «Недоступный код» - это то, что вы можетепросто удалите недоступный код, чтобы избавиться от предупреждения.Или предупреждение «Не удалось найти ссылку» - обычно это сигнал о том, что вы получите ошибки «неопределенного типа», но если нет, то вы можете просто удалить ссылку.Или, может быть, предупреждение «Предыдущее предложение catch уже перехватывает все исключения»: в этом случае вам нужно изменить код так, чтобы либо новое предложение предшествовало общему, либо вообще удалило перехват.

НоДело в том, что в каждом случае, когда вы получаете предупреждение, вы должны изменить свой код, и внесение изменений всегда приведет к «лучшему» коду.Однако, в случае этого вопроса, вызов не является двусмысленным (с точки зрения компилятора), и я не думаю, что вы можете утверждать, что это всегда ошибка - писать такой код, поэтомуследовательно, не должно быть предупреждения.

Если компилятор выдает предупреждение о каждом случае, когда вы делаете что-то, что, вероятно, не лучшая идея, тогда мы были бы завалены предупреждениями!

1 голос
/ 20 апреля 2010

Предупреждения должны сообщать программистам о потенциально глупых ошибках. Это область, которая может вызвать глупую ошибку, поэтому да, она должна генерировать предупреждение. Вы пытаетесь сформировать петицию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...