При множественной реализации интерфейсов мы можем столкнуться с таким поведением: если класс реализует несколько интерфейсов, содержащих член с одинаковой сигнатурой (например, метод), то при реализации такого члена в классе оба интерфейса будут использовать этот член в качестве собственной реализации. Чтобы избежать такого поведения, нам потребуется явная реализация интерфейса. Более того, если в нашем приложении будет большое количество различных классов, реализующих один и тот же интерфейс, то нам необходимо будет реализовать все члены этого интерфейса в каждом классе. Хоть это и не является проблемой, как таковой (это обычная работа с интерфейсами в C# 7.0 и более ранних версиях), однако, начиная с C# 8.0 мы можем создавать реализации по умолчанию непосредственно при определении интерфейса.
интерфейс
Наследование и множественная реализация интерфейсов
Когда мы разбирали тему про наследование классов в C#, то было сказано, что классы наследуются последовательно — один класс не может наследовать несколько классов-предков. Что же касается интерфейсов, то одно из ключевых преимуществ, которые дают нам интерфейсы заключается в том, что один класс может реализовывать сразу несколько интерфейсов. Более того, сами интерфейсы могут наследовать другие интерфейсы.
Интерфейсы в C#
Можно встретить достаточно много различных определений, что такое интерфейс в программировании и, в частности, в языке C#. От самых общих, например, «интерфейс — это то по средствам чего что-то взаимодействует с чем-то». До более понятных и конкретных: интерфейс — это контракт о взаимодействии между различными частями системы. При этом, под «системой» понимается не только одна единственная программа, но и совокупность программных средств, разработанных, в том числе, и разными группами разработчиков. Тема интерфейсов в C# — это довольно интересная и, что главное, одна из наиболее важных тем в изучении основ программирования на C#, наряду с классами и делегатами. И сегодня мы начнем эту тему изучать.