Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325

Когда нужно использовать структуры, когда классы, а когда словарь?

20.06.2016, 17:23. Показов 4549. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хеллоу.

Не могу понять, когда, что, нужно использовать.

Допустим мне нужно получить объект, который имеет список объектов. И таких объектов с вложенным списком будет 23.000.
Что лучше использовать?

Или же, когда есть объект, у которого много свойств и таких объектов > 100.000
как я понимаю, использовать структуры нужно, когда количеств объектов маленькое, не нужно наследоваться.

словари, когда работаешь с каким ни будь ключевым объектом, по которому нужно получить значения... (не ясно, хорошо ли использовать словарь, когда у тебя ключей в словаре > 50.000 или лучше тогда класс создать?)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2016, 17:23
Ответы с готовыми решениями:

Когда лучше применять структуры, а когда классы?
Когда лучше применять структуры, а не классы? Покажите на простом примере, но чтоб прочувствовать суть

Когда предпочтительнее создавать структуры, а когда классы?
Всегда интересовали несколько вещей по поводу C#. 1. Когда предпочтительнее создавать структуры, а когда классы? 2. Кто как использует...

Когда нужно использовать ссылку с out, а когда с ref
Не давно начал учить С# но не могу понять когда надо использовать оut или ref , я так понимаю что это ссылки как в С++. Единственно в чем...

4
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
20.06.2016, 18:19
Насколько я знаю, структуры надо использовать:
1. В операциях, где имеется семантика передачи по значению.
Например, a + b =c. Тут нужны значимые типы с передачей по значению, поскольку чаще всего в destop-ной версии CLR они будут храниться в стеке и удаление копий из стека после выполнения операции сложения происходит быстрее чем из heap-а. Скажем, в этом суть проблемы конкатенации строк - много выделения памяти под неявное создание строк + работа на удаление старых экземпляров строк.
2. + Эти структуры желательно должны иметь небольшое количество полей: 4-5, с целью на загружать стек, если используется больше - надо оформлять в виде класса.

Цитата Сообщение от UseMuse Посмотреть сообщение
Допустим мне нужно получить объект, который имеет список объектов.
В класс.

Цитата Сообщение от UseMuse Посмотреть сообщение
как я понимаю, использовать структуры нужно, когда количеств объектов маленькое, не нужно наследоваться.
Когда объекты маленькие.

Цитата Сообщение от UseMuse Посмотреть сообщение
словари, когда работаешь с каким ни будь ключевым объектом, по которому нужно получить значения... (не ясно, хорошо ли использовать словарь, когда у тебя ключей в словаре > 50.000 или лучше тогда класс создать?)
А словарь тут вообще каким боком? Это ссылочный тип - по сути, контейнер.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
20.06.2016, 19:12
Цитата Сообщение от UseMuse Посмотреть сообщение
как я понимаю, использовать структуры нужно, когда количеств объектов маленькое, не нужно наследоваться.
Структуры нужно использовать тогда, когда нужна семантика копирования по значению, а не по ссылке.
1
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
21.06.2016, 02:05
Словари используются в логике, а не для хранения данных
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
22.06.2016, 11:55  [ТС]
DataPlanner,
Цитата Сообщение от DataPlanner Посмотреть сообщение
Словари используются в логике, а не для хранения данных
Не согласен. Словарь - это контейнер, в котором хранятся данные (адреса экземпляров на куче). Удобство словаря в том, что по ключу, можно получить значение.
Например, создам я словарь, где ключём будет ФИО сотрудника, а в значении будет список строк, в которые будут записаны личные данные человека.
И в течении выполнения кода, я в любой момент могу обратится к словарю, который заранее проинициализированный уже данными сотрудников.
Чем это не является инструментом для хранения данных?
IamRain,
Цитата Сообщение от IamRain Посмотреть сообщение
А словарь тут вообще каким боком? Это ссылочный тип - по сути, контейнер.
А могу тоже самое сделать и в виде структур или класса. Вот в каком контексте и почему я приписал в тему словарь.

Добавлено через 23 минуты
kolorotur, IamRain, в чём хранить данные примера выше, лучше?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.06.2016, 11:55
Помогаю со студенческими работами здесь

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

Когда использовать IEquatable<T>, а когда IStructuralEquatable?
Когда использовать IEquatable&lt;T&gt;, а когда IStructuralEquatable?

В чем разница между StringWriter и StringBuilder и когда нужно использовать эти классы?
Подскажите, пожалуйста, в чем разница между StringWriter и StringBuilder и когда нужно использовать эти классы? То, что есть в этих...

Классы и структуры, когда струтуры предпочтительнее?
Структуры - это некая упрощенная альтернатива классам. При этом, различных ограничений у структур достаточно много, по сравнению с...

Когда использовать ссылочные типы, а когда использовать типы значений?
Как это определить?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru