Является ли сокрытие члена в базовом классе дурным запахом в коде?

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

Возможно я не прав. Но...

Является ли запах кода скрытием члена базового класса с ключевым словом "new"?

2 ответа

Решение

Это зависит от намерения. Если цель состоит в том, чтобы уточнить, например, конкретный тип возврата, то это может быть неоправданным. Классический пример здесь DbConnection, Полезно что SqlConnection вновь заявляет CreateCommand и т. д., возвращая SqlCommand скорее, чем DbCommand, поскольку SqlCommand имеет много специфичных для платформы функций, которые иначе были бы болезненными. Ключевым моментом здесь является то, что DbConnection Метод все еще работает, и назначение и значение этих двух методов одинаковы.

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

Может быть, это может помочь. http://blogs.msdn.com/b/ericlippert/archive/2008/05/21/method-hiding-apologia.aspx

Другие вопросы по тегам