这是C#中struct元素的正确用法吗?有点困惑

时间:2009-11-27 23:12:37

标签: c# data-structures struct

我正在创建一个将从资源文件中读取信息的类(与资源文件的类型无关,只是为了澄清)并通过 表格上的信息,便于操纵信息。

我的问题是我应该使用结构来轻松组织信息,然后将列表传递给表单以寻求利用这些信息吗?

我将要抓取的一组典型信息就是:

[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 个答案:

答案 0 :(得分:12)

在这种情况下,我更喜欢上课。

如果满足以下所有条件,则应使用结构:

  1. 像原始类型一样行事
  2. 实例大小不超过16个字节
  3. 是不可变的
  4. 值语义是可取的。
  5. 在你的情况下,以上都不是真的,因为你正在制作一个(可能是可变的)大型属性组。

    至少在逻辑意义上,您希望将结构用于单个不可变(即:不变)值的结构。复数或向量等是结构是好的候选者的场景类型。

    此外,通常情况下,无论何时在对象内部包含引用类型(如字符串),您都希望对象成为一个类。那,马上就是你不想要结构的好兆头。

    有关详情,请参阅“Choosing Between Classes and Structures”的设计指南页。

答案 1 :(得分:1)

你肯定可以在这种情况下使用结构,但这并不一定意味着你应该

当您需要值语义而不是引用语义时,应该使用structsMSDN有更多指导方针,包括(这些是不使用结构的时候)

  • 它逻辑上表示单个值,类似于基本类型(整数,双精度等)。
  • 实例大小小于16个字节。
  • 这是不可改变的。
  • 不必频繁装箱。

在这种情况下,我会使用一个类。

答案 2 :(得分:0)

是的,结构可以包含多种数据类型。

但是,使用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'中保存的生命值。