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

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне надо было составить иерархию классов: Деталь, механизм, изделие, узел. Это у меня вроде получилось. Но трудность заключается в том, что мне нужно создать 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;. В принципе ничего сложного нет, но не так всё просто как кажется. Есть...

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

7
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
25.05.2016, 17:47
Лучший ответ Сообщение было отмечено DaniLaFokc72 как решение

Решение

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

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

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru