Я считаю, что следует избегать удушения, если это возможно. Если класс хранит входные данные как конкретный класс «Collection» (что означает, что этот класс работает с «Collection», то я думаю, что более естественно просто принять ввод типа «Collection» вместо аналога интерфейса.
Это переносит ответственность за снижение рейтинга (если необходимо) обратно на потребителя, который должен знать, что он делает, если он делает это понижением.
С другой стороны, я бы сказал, что принимать входные данные в качестве интерфейса лучше, чем конкретный класс, поскольку он позволяет более гибко вводить фиктивные объекты. Однако для этого потребуется, чтобы внутреннее содержимое класса зависело от интерфейса, а не от конкретного класса (таким образом, в примере переменная-член будет иметь IEnumerable вместо Collection).
Я согласен с yapiskan, что решение Марка фактически изменило использование, создав копию ввода, и, таким образом, произошла смена ответственности:
До: входные данные все время распределяются между потребителем и этим классом. Таким образом, изменение ввода является «общим» для потребителя и этого класса
После: понимание этого класса входных данных отсоединяется от потребителя после вызова конструктора.