9 / 9 / 5
Регистрация: 07.11.2014
Сообщений: 112
|
|
1 | |
Интерфейс объекта02.04.2016, 15:28. Показов 1873. Ответов 11
Метки нет (Все метки)
Всем привет! Как можно определить интерфейс объекта? type.GetInterface() не помогает. Проблема в том что есть несколько интерфейсов: IResult, IResultMedia, IResultText, IResultLocation. Интерфейс IResult является предком остальных интерфейсов. И есть классы который реализует эти интерфейсы. Как можно определить какой класс какой конкретный интерфейс реализует?
0
|
02.04.2016, 15:28 | |
Ответы с готовыми решениями:
11
Можно ли создать интерфейс, в котором один из методов будет возвращать класс, который реализует интерфейс Как создавать источник данных в виде объекта и связывать столбцы со свойствами объекта Вычислить периметр объекта-окружности и объекта-многоугольника Как использовать интерфейс объекта? |
1498 / 1213 / 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 / 60
Регистрация: 11.01.2016
Сообщений: 1,312
|
||||||
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 / 60
Регистрация: 11.01.2016
Сообщений: 1,312
|
||||||
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 / 60
Регистрация: 11.01.2016
Сообщений: 1,312
|
|
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. Графический интерфейс. Пользовательский интерфейс Узнать имя компонента, реализующего интерфейс и имя категории, в которую этот интерфейс входит Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Интеграция Arduino и ChatGPT: Практическое руководство
InfoMaster 16.01.2025
В современную эпоху технологических инноваций интеграция искусственного интеллекта с микроконтроллерами открывает принципиально новые возможности для создания умных устройств и автоматизированных. . .
|
Как создать робота, управляемого ChatGPT
InfoMaster 16.01.2025
Концепция проекта
В современную эпоху искусственный интеллект и робототехника становятся все более доступными для энтузиастов и разработчиков. Создание роботизированной руки, управляемой ChatGPT,. . .
|
Как создать ChatGPT бота в Telegram на Python
InfoMaster 16.01.2025
В современном мире технологии искусственного интеллекта становятся все более доступными для разработчиков, открывая новые возможности для создания умных и интерактивных приложений. Одним из самых. . .
|
Машинное обучение с помощью Python
InfoMaster 16.01.2025
Машинное обучение стало неотъемлемой частью современных технологий, позволяя компьютерам учиться на основе данных и принимать решения без явного программирования. В сочетании с языком. . .
|
Использование связки C# и PHP в корпоративной разработке и микросервисной архитектуре
InfoMaster 16.01.2025
Введение в интеграцию C# и PHP
В современной корпоративной разработке все чаще возникает потребность в создании гибких и масштабируемых решений, способных эффективно решать широкий спектр. . .
|
Как использовать Kerio дома для управления сетью и пользователями
InfoMaster 16.01.2025
Использование технологий для улучшения повседневной жизни стало неотъемлемой частью современного быта. Одной из таких технологий является Kerio — мощный инструмент для управления сетью и. . .
|
Есть ли будущее у DVD и Blu-ray?
InfoMaster 16.01.2025
В эпоху стремительного развития цифровых технологий и повсеместного распространения потоковых сервисов вопрос о будущем физических носителей информации становится все более актуальным. Особенно остро. . .
|
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
|
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
|
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
|
Параллельное программирование: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование
Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
|
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
|