【问题标题】:Is this a proper usage of the struct element in C#? Kind of confused这是 C# 中结构元素的正确用法吗?有点迷茫
【发布时间】:2009-11-27 23:12:36
【问题描述】:

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

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

我将抓取的一组典型信息例如:

[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

]

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

【问题讨论】:

    标签: c# data-structures struct


    【解决方案1】:

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

    当满足以下所有条件时,应使用结构:

    1. 表现得像原始类型
    2. 实例大小小于 16 个字节
    3. 不可变
    4. 值语义是可取的。

    在您的情况下,以上都不是真的,因为您正在创建(可能是可变的)一大组属性。

    至少在逻辑意义上,您希望将结构用于单一、不可变(即:不改变)的值。复数或向量等是结构体适合的场景类型。

    另外,一般来说,当您要在对象中包含引用类型(例如字符串)时,您会希望您的对象成为一个类。马上,这就是你不想要 struct 的好兆头。

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

    【讨论】:

    • 解释得很漂亮。谢谢你的耳塞。 :P +1 并回答。
    【解决方案2】:

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

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

    • 它在逻辑上表示单个值,类似于原始类型(整数、双精度等)。
    • 它的实例大小小于 16 字节。
    • 它是不可变的。
    • 不必经常装箱。

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

    【讨论】:

      【解决方案3】:

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

      但是,使用结构还是使用类完全取决于您将如何使用对象。请记住,当您将对象分配给新变量时,包含的值将被复制到新对象中,并且不会反映在原始对象中,即:

      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”中的生命值。

      【讨论】:

        猜你喜欢
        • 2012-02-20
        • 2011-05-27
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多