Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

Реализация интерфейса ICollection в конструкторе класса

Когда читаю различные туториалы, да и наш любимый StackOverflow, то часто вижу подобный код
namespace MvcApplication2.Models { public class Category { public int ID { get; set; }
public string Name { get; set; } }
public class Product { public ICollection CategoryID { get; set; }
public Product() { CategoryID = new List(); } } }
Объясните зачем свойство CategoryID объявлять как интерфейс ICollection, если в конструкторе он явно инициализируется при помощи List?
Что пытается избежать проектировщик при таком подходе?
Я понимаю если бы в класс Product внедрялась какая-то зависимость через его конструктор. Но этого ведь нет.
Какой концептуальный момент я упустил?


Ответ

Значение торчит наружу и клиентский код не знает, что там List. То есть, по велению левой пятки архитектора, в новой версии библиотеки List может быть заменено на LinkedList и никто не пострадает. Это абстракция над реализацией коллекции.

Комментариев нет:

Отправить комментарий