Армен Казарян

с 2023
0 подписчиков
0 подписок

Не понимаю вопроса. А как clr понимает, что + это операция сложения? Наверное, потому что операнды являются частью платформы. Как и классы, и интерфейсы.

Может, если вы расскажете суть стоящей перед вами задачи, будет понятнее?

Интерфейс с точки зрения ООП - это просто контракт (договор, обязательство). Если класс наследует интерфейс, то он обязан его реализовать. Вот, собственно, и все

Абстрактные классы очень похожи на интерфейсы, но есть фундаментальные отличия, главное из которых - наследование от абстрактного класса встраивает ваш класс в дерево потомков абстрактного класса. В то же время интерфейс - это чистый контракт.

Из этого вытекает преимущество - класс может реализовать любое количество интерфейсов, в то время как унаследоваться можно только от одного абстрактного (есть языки, где можно наследоваться от нескольких абстрактных, но и там редко это делают)

Второе преимущество - это связанная с отсутствием иерархии наследования возможность без особых усилий подменять классы, которые реализуют интерфейсы, другими классами, которые реализуют те же интерфейсы. На этом основана концепция DI/IoC, плагинчики там всякие. Тот же LINQ - это возможность оперировать любыми коллекциями однообразно, неважно, какой класс лежит в основе коллекции - массив, список, словарь, множество и т.п. Это может быть и вообще не коллекция, а, скажем, генератор значений. Главное, что он поддерживает работу с собой как с коллекцией

Всегда есть возможность не использовать интерфейсы. Но ценой значительных трудозатрат и потери красоты решения. Так ведь и родились интерфейсы - как концептуальное решение