Подтвердить что ты не робот

Использует "базовую" плохую практику, хотя она может быть хорошей для удобочитаемости?

Я знаю, что это субъективный вопрос, но мне всегда интересно узнать о лучших методах кодирования. ReSharper 4.5 дает мне предупреждение для ключевого слова "base" перед вызовами базового метода в классах реализации, т.е.

base.DoCommonBaseBehaviorThing();

В то время как я ценю менталитет "меньше", я также потратил много времени на отладку/поддержку высокоприоритетных приложений и чувствую, что это может помочь узнать, что вызов участника относится к базовому объекту, просто глядя на него. Это достаточно просто, чтобы изменить правила ReSharper, конечно, но что вы думаете? Должна ли использоваться "база" при вызове базовых элементов?

4b9b3361

Ответ 1

Единственный раз, когда вы должны использовать base.MethodCall();, - это когда у вас есть переопределенный метод с тем же именем в дочернем классе, но вы действительно хотите вызвать метод в родительском.

Для всех остальных случаев просто используйте MethodCall();.

Ключевые слова, такие как this и base, не делают код более читаемым и его следует избегать для всех случаев, если они не нужны, - например, в случае, описанном выше.

Ответ 2

Я действительно не уверен, что это плохая практика или нет. но - это не вопрос хорошей или плохой практики, а вопрос семантики. В то время как это полиморфно, что означает, что даже если метод, использующий его, принадлежит базовому классу, он будет использовать метод overriden, а base - нет. база всегда будет ссылаться на метод, определенный в базовом классе метода, вызывающего его, следовательно, он не является полиморфным. Это огромная смысловая разница. база должна затем использоваться соответственно. Если вы хотите использовать этот метод, используйте базу. Если вы хотите, чтобы вызов оставался полиморфным, не используйте базу.

Ответ 3

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

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

Ответ 4

Я думаю, что обычно вы должны использовать base только при переопределении предыдущих функций.

Некоторые языки (С# не) также предоставляют эту функцию, вызывая функцию по имени базового класса явно следующим образом: Foo.common() (называемый где-то в Bar, конечно).

Это позволит вам пропустить вверх по цепочке или выбрать из нескольких реализаций - в случае множественного наследования.

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

Ответ 5

Это действительно вопрос личных предпочтений. Если вам нравится видеть "базу". в начале ваших членов вы можете легко отключить правило (перейдите в "Параметры" > "Уровень проверки" > "Кодовые избыточности" > "Избаловочный базовый".). Не позволяйте правилам поведения, не относящимся к поведенческому статическому коду, влиять на ваш предпочтительный стиль кодирования.

ИЗМЕНИТЬ

Следует учитывать, что статический анализ кода в FXCop и R # существует для предоставления правил для всех возможных потребностей. Фактически придерживаться всех правил одновременно является немного обременительным. Вы должны определить свой предпочтительный стиль кодирования (если вы работаете в команде, делаете это вместе) и придерживаетесь его. Измените свои правила, чтобы они соответствовали вашим стандартам кодирования, а не наоборот.