Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 10.04.2013
Сообщений: 82

Создание массива из разных объектов

26.09.2017, 16:28. Показов 1898. Ответов 2

Студворк — интернет-сервис помощи студентам
Добрый день друзья.
Столкнулся с проблемой и так и не нашел как решить.

Ниже код в котором я реализую 2 класса (Bear (Наследник класса Predator) и Rabbit (наследник класса Herbivores) )
Я реализую своеобразный зоопарк в котором есть клетки в каждую из которых можно посадить какое либо животное.
По моей идее каждая клетка должна состоять из (номер клетки : созданный класс животного)
В python это бы реализовывалось через словари.
В C# столкнулся с проблемой что нужно заранее указать тип объекта ( а тип может быть и Rabbit и Bear и другой в перспективе)
В связи с чем взываю к вашей помощи.

Резюмирую что требуется.
1) создать массив элементов в котором могут быть добавлены разные классы
или
1) создать словарь (ключ- значение) в который в качестве значения можно будет занести класс.
Листинг моего кода ниже.

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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication2
{
    class Menu
    {
        public string[] menu_items;
        public string[] animal_items;
        public int cells;
 
        public Menu() 
        {
            cells = 0;
            menu_items = new string[5];
            menu_items[0] = "add_animal";
            menu_items[1] = "show_info";
            menu_items[2] = "feed";
            menu_items[3] = "add cell";
            menu_items[4] = "exit";
 
            animal_items = new string[2];
            animal_items[0] = "Bear";
            animal_items[1]="Rabbit";
            
        }
 
        public void show_menu()
        {
 
            Console.WriteLine("Pleasse choose what to do");
            for (int i = 0; i < menu_items.Length; i++)
                {
                    Console.WriteLine((i+1).ToString() + " " + menu_items[i]);
                    
                }
            string choiceStr=Console.ReadLine();
 
            switch (choiceStr)
            { 
                case "1": //add animal
                    if (cells == 0)
                    {
                        Console.WriteLine("You have no free cells");
                    }
                    else
                    {
                        Console.WriteLine("Please define which animal should be added:");
                        for (int i = 0; i < animal_items.Length; i++)
                        {
                            Console.WriteLine((i + 1).ToString() + " " + animal_items[i]);
                        }
                        string choice_animalStr = Console.ReadLine();
 
                        switch (choice_animalStr)
                        {
                            case "1": //bear
                                Console.WriteLine("Please enter bear name");
                                string bear_name = Console.ReadLine();
                                Bear new_bear = new Bear(bear_name);
                                new_bear.show_info();
                                break;
                            case "2": //rabbit
                                Console.WriteLine("Please enter rabbit name");
                                string rabbit_name = Console.ReadLine();
                                Rabbit new_rabbit = new Rabbit(rabbit_name);
                                new_rabbit.show_info();
                                break;
                        }
                    }
                    break;
 
                case "2": //show_info
                    break;
                case "3": //feed
                    break;
                case "4": //add cell
                    cells++;
                    Console.WriteLine("You have " + cells + " cells");
                    break;
                case "5":
                    Environment.Exit(0);
                    break;
            }
 
            show_menu();
        }
 
 
    }
 
    
    class Predator
    {
      public bool can_be_food;
      public int animal_size; // 0-tiny 1-small(dog\cat size) 2-normal(human size) 3-big(horse size) 4-Huge(elephant\jiraffe) 
      public string animal_type;
      public string name;
      public int cell_numb;
 
      public Predator() //constructor
      {
          can_be_food = false;
      
      }
 
      public void show_info()
      {
          Console.WriteLine("Animal type = " + animal_type);
          Console.WriteLine("Can be food = "+ can_be_food);
          Console.WriteLine("Animal size = "+ animal_size);
          Console.WriteLine("Animal name = "+ name);
      }
 
 
    }
 
    class Bear : Predator
    {
        public Bear(string obj_name)
        {
            animal_size = 2;
            animal_type="Bear";
            name = obj_name;
 
        }
    
    }
 
 
    class Herbivores
    {
        public bool can_be_food;
        public int animal_size; // 0-tiny 1-small(dog\cat size) 2-normal(human size) 3-big(horse size) 4-Huge(elephant\jiraffe) 
        public string animal_type;
        public string name;
        public int cell_numb;
 
        public Herbivores() //constructor
        {
            can_be_food = true;
 
        }
 
        public void show_info()
        {
            Console.WriteLine("Animal type = " + animal_type);
            Console.WriteLine("Can be food = " + can_be_food);
            Console.WriteLine("Animal size = " + animal_size);
            Console.WriteLine("Animal name = " + name);
        }
 
 
    }
 
    class Rabbit : Herbivores
    {
        public Rabbit(string obj_name)
        {
            animal_size = 1;
            animal_type = "Rabbit";
            name = obj_name;
 
        }
 
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Menu game_menu = new Menu();
            game_menu.show_menu();
 
                
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.09.2017, 16:28
Ответы с готовыми решениями:

Вызов одинакового метода для разных объектов из массива
Напишите три класса: Secretary, Director и Programmer. Каждый из них должен содержать метод CalculateSalary. Для простоты пусть каждый из...

Создание коллекции объектов разных классов
Здравствуйте. Помогите, пожалуйста, с задачкой создания коллекции объектов разных типов. Я сначала реализовал программку, использовав...

[ПОМОГИТЕ] Создание объектов на разных страницах
Привет всем. Прошу помощи. Мне нужно, чтобы при нажатии на кнопку, на одной странице, создавался объект на другой странице. Как это можно...

2
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
26.09.2017, 16:50
CROM, создай класс Animal, перенеси в него все элементы, общие для хищников и травоядных и соответствующие классы унаследуй от него. Далее используй этот тип для типизации массивов и словарей.
0
5 / 6 / 0
Регистрация: 08.06.2017
Сообщений: 32
26.09.2017, 16:53
Цитата Сообщение от CROM Посмотреть сообщение
1) создать массив элементов в котором могут быть добавлены разные классы
Тут нужен не массив, а кортеж.

Цитата Сообщение от CROM Посмотреть сообщение
1) создать словарь (ключ- значение) в который в качестве значения можно будет занести класс.
Обобщенный класс Dictionary<TKey, TValue> вам поможет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2017, 16:53
Помогаю со студенческими работами здесь

Простое создание строки из объектов разных типов данных
Всем доброго времени суток. Создал класс, который (по моему мнению) сделает более удобным создание строк и их передачу в функции,...

Создание массива объектов
Как создать массив объектов на C++ Builder?

Создание массива объектов
Пытаюсь создать массив объектов, чтоб динамически создавать файлы, подскажите в чем проблема? Или покажите более правильную конструкцию. За...

Получение состояния переменной из разных скриптов для разных объектов и её изменение
Есть два объекта: player и sensor, и два скрипта для каждого объекта: move (Для player) и groundsensor (Для sensor). Как передать состояние...

Создание массива объектов класса
Доброго времени суток. Visual Studio 2005(windows form application), вопрос следующий: как создать массив объектов своего класса? Класс: ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru