代码之家  ›  专栏  ›  技术社区  ›  Sergio Tapia

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

  •  0
  • Sergio Tapia  · 技术社区  · 15 年前

    我正在制作一个类,它将从资源文件中读取信息(无论资源文件的类型如何,只是为了澄清),并通过 表单上的信息,便于操作信息。

    我的问题是,我是否应该使用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
    

    我应该在这种情况下使用struct吗?英雄名称是一个字符串,也是英雄类型。但例如,[肖像]将是一个图像。一个结构可以容纳多种数据类型吗?

    3 回复  |  直到 15 年前
        1
  •  12
  •   Reed Copsey    15 年前

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

    1. 像原始类型一样工作
    2. 实例大小小于16字节
    3. 价值语义是可取的。

    您可能希望使用一个结构来表示一个单一的、不可变(即:不改变)的值,至少在逻辑意义上是这样的。复数或向量等是结构很好的候选场景类型。

    有关详细信息,请参见“设计指南”页 Choosing Between Classes and Structures ".

        2
  •  1
  •   Bob    15 年前

    你当然 可以 在这种情况下使用struct,但这并不一定意味着 应该 .

    structs 当您需要值语义而不是引用语义时。 MSDN 有更多的指导原则,包括(不使用结构时)

    • 它的实例大小小于16字节。
    • 它不必经常装箱。

        3
  •  0
  •   Wilhelm    15 年前

    是的,一个结构可以容纳多种数据类型。

    然而,使用结构与使用类完全取决于如何使用对象。请记住,将对象指定给新变量时,containgn值将复制到新对象中,而不会反映在原始对象中,即:

    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)