|
0 / 0 / 1
Регистрация: 07.08.2008
Сообщений: 22
|
||||||
Наследование и интерфейс05.09.2019, 14:02. Показов 1759. Ответов 10
Метки приведение типов (Все метки)
Уважаемые специалисты,
мой вопрос посвящен простому наследованию(код ниже прилагается).Я специально сделал классы максимально примитивными - задействовал только по несколько свойств. Главным образом вопрос касается того участка основной программы, где есть ветвление и приведение типов от базового класса к дочернему, - такой подход в литературе считается плохим стилем. Другое дело, что можно базовый класс заменить на интерфейс и, разумеется, в классах реализующих интерфейс перепрописать(реализовать) свойства интерфейса. Но тогда другое неудобство, - при изменении начинки интерфейса нужно каждый раз изменять классы, которые интерфейс реализуют. Часто, в разных статьях, встречаю наследование и реализацию интерфейсов, как альтернативные понятия или вообще как синоним, - не могу этого понять, так как для меня это разные вещи. Мой вопрос: какая реализация будет наиболее оптимальной? 1) как в коде 2) через интерфейс IAnimal 3) Третий вариант спасибо )
0
|
||||||
| 05.09.2019, 14:02 | |
|
Ответы с готовыми решениями:
10
Iptables, правила, перенаправляющие на интерфейс eth1 все пакеты, приходящие на интерфейс eth0
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||
| 05.09.2019, 14:20 | |||||||
|
Но как правило если у вас есть код, проверяющий типы и выполняющий разные действия в зависимости от конкретного типа, то это хороший признак того, что в базовом классе нужно объявить абстрактный/виртуальный метод, который переопределять с нужной логикой в наследуемых классах. Тогда в вызывающем коде никаких проверок делать не нужно. Добавлено через 2 минуты
0
|
|||||||
|
0 / 0 / 1
Регистрация: 07.08.2008
Сообщений: 22
|
||||||
| 05.09.2019, 15:49 [ТС] | ||||||
|
Спасибо за обратную связь. Вот в чем еще вопрос, а что если поведение у вышеприведенных объектов отсутствует как таковое (я неудачно для простоты привел пример с животными, - у них безусловно поведение может быть). В моем реальном случае, объекты-это только данные, и в зависимости от этих данных, вести себя неким образом будет некий другой объект.
Например следующий класс использует список. Поведение объекта данного класса зависит от членов списка:
0
|
||||||
|
управление сложностью
|
|
| 05.09.2019, 16:00 | |
|
В интерфейсе нужно объявить метод - поведение, и в классах, которые наследуют этот интерфейс реализовать необходимое поведение, но тут нужно быть осторожным, т.к. может всплыть ситуация, когда "подстановка Лисков" не будет работать.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 05.09.2019, 16:13 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 07.08.2008
Сообщений: 22
|
||||||
| 05.09.2019, 17:28 [ТС] | ||||||
|
Сейчас разрабатываю драйвер опроса разных устройств на заводе(датчики, двигатели и т.д.). Точки данных (то есть сетевые тэги) условно можно поделить на две категории: дискретные и аналоговые. Тэги - это просто данные без поведения. Поведение (а именно запросы в сеть), будет зависеть от списка тэгов. То есть в некий класс NetworkController будет передаваться список тэгов, которые формирует пользователь. На основании этого списка NetworkController и будет работать с сетью (слать посылки и принимать(парсить) посылки). В принципе все работоспособно, я для себя пытаюсь понять как правильно писать c# код в таких ситуациях. Упрощенно выглядит так:
0
|
||||||
|
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
|
||||||
| 05.09.2019, 17:41 | ||||||
|
о чем собственно и говорили
1
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 05.09.2019, 18:05 | ||
|
Sasha8111, спасибо за пояснение, однако больше всего интересует вот эта часть:
0
|
||
|
0 / 0 / 1
Регистрация: 07.08.2008
Сообщений: 22
|
||||||
| 05.09.2019, 18:27 [ТС] | ||||||
|
Как бы по проще объяснить...На самом деле я использую dll, которая генерит либо в IP порт, либо в COM порт запросы (в зависимости от того как я эту dll настрою). Ниже ряд методов этой dll, которые как раз генерят запросы:
0
|
||||||
|
Модератор
|
||
| 05.09.2019, 21:30 | ||
|
У базового класс должен быть виртуальный/абстрактный метод формирующий информацию для запроса или запрос полностью. Во внешнем же коде из общего для всех типов метода получается информация для запрос и запрос отправляется куда надо. Такая инкапсуляция нужна, так как всю необходимую инфу о типе может знать только сам тип. Если же для каждого типа приходится вводить разную обработку во внешнем коде, то напрашивается вывод, что эта обработка должна происходить в самом типе. Максимум во внешнем коде может быть фильтрация по типу. Допустим, запросы каких-то типов надо направить по иному пути.
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||||||
| 05.09.2019, 22:09 | ||||||||||||
1
|
||||||||||||
| 05.09.2019, 22:09 | |
|
Помогаю со студенческими работами здесь
11
Заменить наследование классов на наследование интерфейсов Наследование интерфейса и наследование реализации База данных "учебный план специальности". GUI. Графический интерфейс. Пользовательский интерфейс Узнать имя компонента, реализующего интерфейс и имя категории, в которую этот интерфейс входит Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|