9 / 9 / 5
Регистрация: 07.11.2014
Сообщений: 112
|
|
1 | |
Интерфейс объекта02.04.2016, 15:28. Показов 1864. Ответов 11
Метки нет (Все метки)
Всем привет! Как можно определить интерфейс объекта? type.GetInterface() не помогает. Проблема в том что есть несколько интерфейсов: IResult, IResultMedia, IResultText, IResultLocation. Интерфейс IResult является предком остальных интерфейсов. И есть классы который реализует эти интерфейсы. Как можно определить какой класс какой конкретный интерфейс реализует?
0
|
02.04.2016, 15:28 | |
Ответы с готовыми решениями:
11
Можно ли создать интерфейс, в котором один из методов будет возвращать класс, который реализует интерфейс Как создавать источник данных в виде объекта и связывать столбцы со свойствами объекта Вычислить периметр объекта-окружности и объекта-многоугольника Как использовать интерфейс объекта? |
1495 / 1210 / 821
Регистрация: 29.02.2016
Сообщений: 3,628
|
|
02.04.2016, 15:33 | 2 |
How to determine if a type implements an interface with C# reflection
http://stackoverflow.com/quest... reflection
0
|
9 / 9 / 5
Регистрация: 07.11.2014
Сообщений: 112
|
|
02.04.2016, 19:47 [ТС] | 3 |
afront, Нет это не подходит так как я заранее не знаю какой объект(класс) будет но точно знаю что этот объект реализует один из вышеперечисленных интерфейсов. Вообщем задачка такая: Есть несколько подключаемые библиотеки и они возвращают ответ в виде объекта который реализует следующие интерфейсы: IResultMedia, IResultLocation, IResultText и эти интерфейсы наследует IResult. Ответ который возвращает подключаемые библиотеки может быть IResult, IResultMedia, IResultText или еще какой нибудь объект реализующий интерфейс наследуемый от IResult. И в зависимости от типа этих возвращаемых объектов надо их обработать по разному.
0
|
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
|
|
02.04.2016, 21:47 | 4 |
Проверять через as/is?
0
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
||||||
02.04.2016, 22:07 | 5 | |||||
Muhammadjon,
можно так
0
|
9 / 9 / 5
Регистрация: 07.11.2014
Сообщений: 112
|
|
04.04.2016, 11:28 [ТС] | 6 |
1. Это дает правильный результат (true) в любом случае если интерфейс объекта является наследником IResult.
2. Думаю будет не правильным решением так как придется каждый раз добавить if если добавляется еще один интерфейс.
0
|
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
|
||||||
04.04.2016, 15:46 | 7 | |||||
Неправда
Вообще, наверно, вам стоит пересмотреть архитектуру. Если метод принимает IResult, то ему не должно быть дела до того IResultText это или IResultMedia. Ему должно быть достаточно методов из IResult, остальное - проблема класса, реализующего его, иначе какой смысл в интерфейсе?
1
|
9 / 9 / 5
Регистрация: 07.11.2014
Сообщений: 112
|
||||||
04.04.2016, 17:56 [ТС] | 8 | |||||
Я тоже думаю об этом. Возможно я не совсем правильно использовал интерфейсы. Вот опишу что хотел сделать. Есть программа который отправлять сообщения пользователям в зависимости от содержания сообщения. А сообщение обрабатывает подключаемые модули(библиотека,dll). Каждый модуль может только создать ответ и ответ может быть в текстовом, аудио, видео или еще на каком нибудь формате. Все основные методы который должен присутствовать в любом ответе отмечено в интерфейсе IResult. И соответственно для текстового ответа свой интерфейс(IResultText) наследуемый от IResult и для других тоже так. Также есть модуль Sender который отправляет полученный ответ этих подключаемых модулей. Внутри этого модуля реализованы несколько функций для отправки текста, видео, аудио и т.д. Теперь проблема в том что как определить типа ответа и передать в нужную функцию.
Добавлено через 12 минут При проверке на IResult
0
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
||||||
05.04.2016, 10:22 | 9 | |||||
Muhammadjon,
Есесено будет везде true
а так нет
1
|
9 / 9 / 5
Регистрация: 07.11.2014
Сообщений: 112
|
|
05.04.2016, 10:40 [ТС] | 10 |
Кажется дошло )))). Можно же не проверять на IResult ))) т.е. объект который реализовал непосредственно интерфейс IResult не может быть ответом. В IResult будет только адрес отправителя и некоторые обязательные параметры. А то что надо отправить отмечается в других интерфейсах наследованного от IResult. Модули может возвращать объекты реализующий интерфейс IResult. А это нормально? т.е. не будет велосипедом?
Добавлено через 7 минут А можно ли обойтись без If ? А то получается много ifов
0
|
162 / 150 / 59
Регистрация: 11.01.2016
Сообщений: 1,311
|
|
05.04.2016, 11:10 | 11 |
Muhammadjon, if many "if", used "switch"
0
|
9 / 9 / 5
Регистрация: 07.11.2014
Сообщений: 112
|
||||||
05.04.2016, 11:49 [ТС] | 12 | |||||
Изменил архитектуру. Полностью удалил все эти интерфейсы кроме IResult. Кажется слишком фантазировал. Потому что в дальнейшем вряд ли будет что то еще нового типа. Создал несколько абстрактных классов который реализует этот интерфейс. Модуль который обработает эти ответы "понимает" только этот интерфейс и абстрактные классы. Только вот с этими if что то не могу найти решение. Ну со switch ясно но как обработать в этом switche. В голову приходит только это
0
|
05.04.2016, 11:49 | |
05.04.2016, 11:49 | |
Помогаю со студенческими работами здесь
12
Wrapper реализовать интерфейс оборачиваемого объекта Iptables, правила, перенаправляющие на интерфейс eth1 все пакеты, приходящие на интерфейс eth0 База данных "учебный план специальности". GUI. Графический интерфейс. Пользовательский интерфейс Узнать имя компонента, реализующего интерфейс и имя категории, в которую этот интерфейс входит Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |