Является ли сокрытие члена в базовом классе дурным запахом в коде?
Для меня это больше похоже на исключение, чтобы скрыть члена в базовом классе, чтобы взломать что-то вместо рефакторинга плохого дизайна...
Возможно я не прав. Но...
Является ли запах кода скрытием члена базового класса с ключевым словом "new"?
2 ответа
Это зависит от намерения. Если цель состоит в том, чтобы уточнить, например, конкретный тип возврата, то это может быть неоправданным. Классический пример здесь DbConnection
, Полезно что SqlConnection
вновь заявляет CreateCommand
и т. д., возвращая SqlCommand
скорее, чем DbCommand
, поскольку SqlCommand
имеет много специфичных для платформы функций, которые иначе были бы болезненными. Ключевым моментом здесь является то, что DbConnection
Метод все еще работает, и назначение и значение этих двух методов одинаковы.
Если вы делаете это, а методы делают что-то другое или возвращают что-то другое, то в некоторых случаях это может привести к путанице. И иногда это может иметь смысл; p Если они делают одно и то же и изменяются только формально, сообщая что-то о реализации, которая полезна для вызывающей стороны, тогда все в порядке.
Может быть, это может помочь. http://blogs.msdn.com/b/ericlippert/archive/2008/05/21/method-hiding-apologia.aspx