#c_sharp #интерфейс
Есть программа, в которой я использую ссылки на интерфейсы. Грубо говоря. У меня
есть интерфейс IRoom, в которой есть интерфейс ITableList, с методами взаимодействия
со столами, в котором есть интерфейс ITable со всеми свойствами стола.
Зачем разработчики сделали так, если можно было использовать объекты в объектах?
Где разработчики реализовали все методы интерфейсов, если я работаю лишь с ссылками
на интерфейс?
Просто необходимо реализовать подобное приложение и пытаюсь понять, зачем в данном
сделали именно так.
Это интерфейс Позиций
Это интерфейс Список позиций взаимодействия с Позициями
Это интерфейс всего, там же и есть взаимодействие со Списком позиций
Это код взаимодействия sec - ISecurity, Positions - IPositionList, GetLast.... -
IPosition
Ответы
Ответ 1
Потому что под интерфейсом может скрываться экземпляр любого класса, реализующего этот интерфейс, и при необходимости его можно легко подменить (например в целях тестирования или чтобы изменить поведение). В случае с экземпляром конкретного класса подменить его на экземпляр какого-то другого класса уже нельзя. Под каждым интерфейсом скрывается какая-то конкретная реализация, в которой и определены необходимые методы. Например: interface IFoo { IBar Bar { get;set; } // прочие свойства и методы } class Foo : IFoo { public IBar Bar { get; set; } } var foo = new Foo(); // здесь мы присваиваем свойству Bar переменную класса Bar, в котором // уже определены все методы, указанные в интерфейсе IBar foo.Bar = new Bar();Ответ 2
Есть такая штука, Принцип инверсии зависимостей - про него можно легко нагуглить. Интерфейсы являясь абстракцией и помогают реализовывать этот принцип. Используя интерфейсы программу можно сделать более гибкой и легко тестируемой. Интерфейс это контракт - он гарантирует, что класс реализующий его будет содержать описанные в интерфейсе методы - так что вся реализации интерфейсов находится непосредственно в классах. Ну как это делается, вам уже в соседнем ответе рассказали. Не буду повторяться. То что вы поняли под ссылкой на интерфейс - это просто конструкция языка, подразумевающая, что в этом поле будет хранится ссылка на любой класс реализующий этот интерфейс.
Комментариев нет:
Отправить комментарий