Это правильное использование элемента структуры в C #? Вид сбитый с толку - PullRequest
0 голосов
/ 28 ноября 2009

Я делаю класс, который будет читать информацию из файлов ресурсов (неважно, тип файла ресурсов, просто для пояснения) и передавать информация в форме для легкого манипулирования информацией.

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

Типичный набор информации, которую я собираюсь просмотреть, например:

[Hero Name]
[Hero Type]
[Starting HP]
[Starting Mana]

[Portrait]
[Backstory]

[Spell 1]
[Spell 1 Description]

[Spell 2]
[Spell 2 Description]

[Spell 3]
[Spell 3 Description]

[Spell 4]
[Spell 4 Description

]

Должен ли я использовать структуру для этого случая? Имя героя - это строка, а также тип героя. Но, например, [Портрет] будет изображение. Может ли структура содержать несколько типов данных?

Ответы [ 3 ]

12 голосов
/ 28 ноября 2009

Я бы предпочел класс, в этом случае.

Структуры следует использовать, когда выполняются все следующие условия:

  1. Действуй как примитивные типы
  2. Размер экземпляра не должен превышать 16 байт.
  3. Неизменны
  4. Семантика значений желательна.

В вашем случае, ни одно из вышеперечисленного не является действительно верным, поскольку вы создаете (возможно, изменяемую) большую группу свойств.

Вы хотели бы использовать структуру для чего-то, что было бы единственным неизменным (то есть: неизменяемым) значением, по крайней мере, в логическом смысле. Комплексное число или вектор и т. Д. - это типы сценариев, в которых структуры являются хорошими кандидатами.

Кроме того, как правило, каждый раз, когда вы собираетесь включить ссылочный тип (например, строку) внутри вашего объекта, вам нужно, чтобы ваш объект был классом. Это хороший признак того, что вам не нужна структура.

Подробнее см. На странице рекомендаций по проектированию для " Выбор между классами и структурами ".

1 голос
/ 28 ноября 2009

Вы, конечно, можете использовать структуру для этого случая, но это не обязательно означает, что вы должны .

Вы должны использовать structs, когда вам нужна семантика значений, а не ссылочная семантика. MSDN содержит больше рекомендаций, в том числе (когда не используются структуры)

  • Логически представляет одно значение, подобное примитивным типам (целое, двойное и т. Д.).
  • Размер экземпляра меньше 16 байт.
  • Он неизменен.
  • Это не нужно будет часто в штучной упаковке.

В этом случае я бы использовал класс.

0 голосов
/ 28 ноября 2009

Да, структура может содержать несколько типов данных.

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

Dim a As New Character("Willow", 12) ' Starting up the name and the Hp, as an example.
Dim b As Character = a
b.HP = 24
Console.WriteLine(a.HP)

В коде будет написано «12», так как это очки жизни, сохраненные в «a».

...