Припустим, у меня есть интерфейс с методом A. Я создаю два дочерних к нему интерфейса, один имеет метод B, второй - метод C. После чего создаю класс, реализующий оба дочерних интерфейса, и объявляю там методы A, B и C. Не возникнет ли проблем с реализацией метода А? Чаще всего насчет ситуаций с одинаковыми именами методов в интерфейсах предлагают отдельную реализацию. Мне, к примеру, нужно, чтобы там выполнялось только одно действие. Или стоит вынести метод A в отдельный интерфейс?
Принятый ответ
реализован в классе.
Скользкое понятие.
В любом случае, даже если дочерний интерфейс переобъявит метод A() вот так:
interface iB
{ new void A(); void B(); }
и твой класс Class_Example реализует его, у тебя будут выполнятся одни и те же действия
В любом случае, даже если дочерний интерфейс переобъявит метод A() вот так:
interface iB
{ new void A(); void B(); }
и твой класс Class_Example реализует его, у тебя будут выполнятся одни и те же действия
- И в случае iB b = new Class_Example(); b.A()
- И в случае iA a = new Class_Example(); a.A();
- И в случае Class_Example class_name = new Class_Example(); class_name.A().
В случае, когда интерфейс не переобъявляет метод A() даже говорить не приходиться - тем более будут те же действия.
Вообще здесь такая штука, по моему мнению конкретно в этом случае надо разбираться по факту проблемы, а не по возможной проблеме.
P.S.
Насчет интерфейсов "Полный справочник по C#" , стр 320.
P.S.
Насчет интерфейсов "Полный справочник по C#" , стр 320.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Devion
MyClass2 реализует общий для двух интерфейсов метод A(). Сами интерфейсы, как бы сказать, они же не содержат метода как таковые, они обязывают к реализации и абстрагируют. А один и тот же метод это или два разных уже другое дело.
Я почему-то думал, что второй способ как раз не вызывает вопросов :) в то время как с первым все не так гладко - чтобы использовать методы нужно приводить экземпляр к интерфейсу. А еще их "смешивать" можно.
Отредактирован Devion
Вероятно, эта функция предусмотрена на случаи, когда разные интерфейсы разных библиотек просят реализовать метод с одинаковым названием. Модульный подход предусматривает автономные, несвязанные между собой вещи и это как бы намекает, что такие ситуации имеют место быть. В таких случаях такое решение лучше чем его отсутствие.
Это примерно та же история, что и с пространствами имен - там есть вероятность совпадения имен классов, тут есть вероятность совпадения имен методов. Только решается разными способами, а причины общие - избежать двоякости.
Кстати интересно как такая конструкция поведет себя под рефлексией - что там покажет. И попробовать, откроется ли под дерефлектором этот код.
Отредактирован prog
Тот пример, который ты привел, и есть причина, почему в C# сделали множественное наследование интерфейсов и одиночное классов)