С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 10.11.2015
Сообщений: 16
1

Иерархия классов и List для разных типов

25.05.2016, 17:24. Показов 2812. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, мне надо было составить иерархию классов: Деталь, механизм, изделие, узел. Это у меня вроде получилось. Но трудность заключается в том, что мне нужно создать List (либо массив) для всех этих классов, то есть в одном List-е должны храниться элементы различных типов (Detail, Gear и т.д)

Я пробую сделать List<object>, но тогда я не могу обращаться к методам классов. И мне во всём этом нужно организовать поиск, сортировку и вывод.

Помогите пожалуйста дописать программу, либо дайте какой-либо совет. Заранее спасибо.

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
public abstract class Product //Изделие
    {
        protected int number;
        protected int weight;
        protected string name;
 
        public int Number
        {
            get { return number; }
            set { number = value; }
        }
        public int Weight
        {
            get { return weight; }
            set { weight = value; }
        }
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
 
        //Конструктор для класса Product
        public Product(int number, int weight, string name)
        {
            this.number = number;
            this.weight = weight;
            this.name = name;
        }
 
        public abstract string Show(); //Абстрактный метод (вывод записи)
    }
 
    public class Gear : Product //Механизм (Отдельный класс, наследует только Product)
    {
        private string type;
 
        public string Type
        {
            get { return type; }
            set { type = value; }
        }
 
        public Gear(int number, int weight, string name, string type)
            : base(number, weight, name)
        {
            this.type = type;
        }
 
        public override string Show()
        {
            string str = "Номер механизма: " + number + "\nВес: " + weight + "\nНаименование: " + name + "\nТим Механизма: " + type;
            return str;
        }
    }
 
    public class Detail : Product //Деталь (Производная от изделия)
    {
        protected string manufacturer;
 
        public string Manufacturer
        {
            get { return manufacturer; }
            set { manufacturer = value; }
        }
 
        //Конструктор для класса Detail (:base вызывает конструктор определённый в классе Product)
        public Detail(int number, int weight, string name, string manufacturer)
            : base(number, weight, name)
        {
            this.manufacturer = manufacturer;
        }
 
        public override string Show()
        {
            string str = "Номер детали: " + number + "\nВес: " + weight + "\nНаименование: " + name + "\nПроизволитель: " + manufacturer;
            return str;
        }
    }
 
    public class Node : Detail //Узел (Производная от детали)
    {
        private bool agile;
 
        public bool Agile
        {
            get { return agile; }
            set { agile = value; }
        }
 
        public Node(int number, int weight, string name, string manufacturer, bool agile)
            : base(number, weight, name, manufacturer)
        {
            this.agile = agile;
        }
 
        public override string Show()
        {
            string str = "Номер узла: " + number + "\nВес: " + weight + "\nНаименование: " + name + "\nПроизволитель: " + manufacturer + "\nПоворотный: " + agile;
            return str;
        }
    }
 
    public class MechanicsList
    {
        List<object> mas = new List<object>();
 
        //Добавление детали
        public void Add_detail(int number, int weight, string name, string manufacturer)
        {
            mas.Add(new Detail(number, weight, name, manufacturer));
        }
 
        //Добавление механизма
        public void Add_gear(int number, int weight, string name, string type)
        {
            mas.Add(new Gear(number, weight, name, type));
        }
 
        //Добавление узла
        public void Add_node(int number, int weight, string name, string manufacturer, bool agile)
        {
            mas.Add(new Node(number, weight, name, manufacturer, agile));
        }
 
 
    }


P.S. Иерархия классов должна быть именно такой, хотя по ГОСТУ мехнизм должен быть отдельным классом
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.05.2016, 17:24
Ответы с готовыми решениями:

Метод с возвращаемым List разных типов
Добрый день. Требуется создать метод который возвращает List&lt;&gt;, но тип был постоянно разным....

Сравнение разных типов дочерних классов IComparable CompareTo
Доброго времени суток! Возникла задача сортировать список List&lt;T&gt;. В принципе ничего сложного нет,...

Приведение типов разных классов с одинаковыми базовыми родителями
Доброго. Вопрос к вам, форумчане. Есть два стула два базовых класса. Есть два класса,...

Как сделать массив Collection из разных типов классов?
pomogite zdelat masiv (Collection) , vluchauschiy v seby raznii tipi klassov ..........

7
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,227
25.05.2016, 17:47 2
Лучший ответ Сообщение было отмечено DaniLaFokc72 как решение

Решение

DaniLaFokc72, создавайте List<Product>.
0
52 / 39 / 29
Регистрация: 08.04.2016
Сообщений: 126
25.05.2016, 18:00 3
DaniLaFokc72,

Деталь, механизм, изделие, узел - вот эти понятия они друг из друга прямо проистекают и каждая последующая является более специфической версий предыдущей?

Например, 1 изделие может включать в себя 1-N механизмов, каждый из которых в свою очередь может включать в себя 1-N деталей, каждый из которых в свою очередь может включать в себя 1-N узлов?

А почему Product - абстрактный класс. Разве его экземпляр не должен быть создан?
0
0 / 0 / 1
Регистрация: 10.11.2015
Сообщений: 16
25.05.2016, 18:37  [ТС] 4
Нет, эти классы полностью независимы друг от друга. А вот насчёт класса Product вы правы, сейчас исправлю
0
52 / 39 / 29
Регистрация: 08.04.2016
Сообщений: 126
25.05.2016, 18:41 5
Цитата Сообщение от DaniLaFokc72 Посмотреть сообщение
эти классы полностью независимы друг от друга.
Если они независимы друг от друга, зачем тогда они наследуют друг другу?
0
0 / 0 / 1
Регистрация: 10.11.2015
Сообщений: 16
25.05.2016, 19:02  [ТС] 6
Под независимостью я подразумевал то, что кол-во изделий никак не связано с количеством, например, деталей.
0
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,227
25.05.2016, 21:42 7
Цитата Сообщение от chronicler Посмотреть сообщение
А почему Product - абстрактный класс.
Потому что не бывает просто продуктов. Вы не можете пойти в магазин и купить "продукт", вы всегда покупаете конкретную вещь: деталь, узел, механизм и т.д.
0
52 / 39 / 29
Регистрация: 08.04.2016
Сообщений: 126
25.05.2016, 22:02 8
kolorotur,
Там в коде напротив класса Product стоит комментарий, что это Изделие. Если Изделие в данном случае является абстрактной сущностью для детали, узла, механизма (по аналогии: транспортное средство - автомобиль, грузовик, мотоцикл, гужевая повозка), тогда вопросов нет.
0
25.05.2016, 22:02
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2016, 22:02
Помогаю со студенческими работами здесь

Иерархия классов для будущей игры
Здравствуйте. До этого писал простенькие игрушки вроде карточных игр, но захотелось написать что то...

Иерархия классов для представления геометрических фигур в контейнере
Разработать иерархию классов для представления геометрических фигур: прямая, ломанная,...

Иерархия классов для хранения информации о заказах в кофейне и LINQ запросы
Разработать иерархию классов для хранения информации о заказах в кофейне. О каждом заказе известна...

Что такое ссылки, и для чего нужна иерархия классов при взаимодействии с ссылками
В том случае когда иерархия однолинейная т.е. допустим класс Point &lt; Square &lt; Reactangle И что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как проводить научные вычисления на 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
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru