Правило гласит, почему вы получаете сообщение:
Метод в базовом типе скрыт методом с одинаковым именем в производном типе, когда сигнатура параметра производного метода отличается толькопо типам, которые являются более слабыми производными, чем соответствующие типы в сигнатуре параметра базового метода.
В вашем дочернем классе метод Contains принимает object
, который имеет более слабую типизацию, чем string
и, следовательно, скрывает родителя.
Причина, по которой вы получаете предупреждение от FxCop, заключается в том, что это может быть не преднамеренный выбор дизайна (поскольку вы ничего не отменяете или не используете ключевое слово new
).
Даже если это намеренный выбор дизайна, я бы сказал, что это не обязательно хороший выбор.Если вы уже знаете, что коллекция будет содержать строки и ничего больше, зачем вам предоставлять метод Contains
, который принимает что-то отличное от string
?Может показаться, что вы добавляете гибкость в дизайн, но, в конце концов, вы действительно только запутаете других разработчиков.
Существуют также другие варианты именования вместо вызова метода Contains
, которые не скрывают (намеренно или нет) метод базового содержимого.