Использование интерфейса позволяет изменить реализацию поддержки без прерывания вызовов.
Две строки в вашем примере означают одно и то же, но если вы выставите IList<T>
как свойство, вы можете точно изменить то, что возвращается, без вызова кода, который нужно изменить.
Предположим, у вас есть класс, который выставляет List<int>
как свойство. Все в порядке, до тех пор, пока вы не поймете, что вам нужно обработать событие, возникающее при добавлении элемента в этот список. Вы не можете; вам придется изменить тип свойства и, следовательно, весь код, который вызывает это. Если вы изначально объявите IList<int>
, вы можете изменить конкретную реализацию на другую (если она все еще поддерживает интерфейс).
Это то, что StyleCop подняло и рассмотрело в этот вопрос .