通常玩游戏,但我正在绕道而行,为教育目的制作一个小问题和答案应用程序。
无论如何,我有一个问题类,其中包含众多成员:问题本身,问题的答案,一系列可能的答案等。毫无疑问,这应该是一个班级。
我的答案类只包含一个字符串,一个Enum和一个int id号,如下所示:
public class Answer
{
public string Answer { get { return answer;} private set { answer = value; } }
public Answer_Category = Some_Value; // The enum.
public int ID { get { return id; } private set { return id; } }
private string answer;
private int id;
}
好吧所以它有两个字符串,也就是ctor已经出局了。
那我应该把这个结构化吗?我问,因为它似乎可以与Vector构成一个结构,是一个非常小的数据结构。
自然是一个问答应用程序,答案类/结构将成为许多搜索调用的主题。
IMO这应该是一个结构 - 仅仅因为结构的大小,在一段时间内没有使用过C#,只是寻找一些澄清。
答案 0 :(得分:5)
决定归结为您是想要值类型还是引用类型。换句话说,您希望赋值运算符是什么意思?如果要分配复制值,请使用结构。如果您希望赋值给另一个参考e,请使用一个类。
答案 1 :(得分:1)
结构有两个主要用法:对于希望方便地移动自变量聚合(例如点的坐标)的情况,或者在身份是的情况下经常使用小的不可变对象的情况不重要(例如Decimal
或DateTime
)。由于结构类型的变量只是保存变量的集合,因此用于此目的的结构应该简单地将其内容公开为公共字段。这样做将清楚地表明,任何可能适用于结构成员的不变量都是创建结构的代码的责任。例如,如果一个人拥有MinMax
成员int
成员Minimum
和Maximum
的结构,则为这些成员使用公开的公共字段会明确表明结构本身并不承诺Maximum >= Minimum
。返回这样一个结构的方法可能会保证它不会返回Maximum < Minimum
的结构,但接收结构并希望Maximum >= Minimum
的方法必须自己检查这些字段。另一方面,希望在结构中设置这些值的代码将能够以任何方便的顺序设置它们,而不必担心结构抛出异常,因为Minimum
被设置为高于{{ 1}}。
MSDN指南假设任何结构的目的都是像对象一样运行。由于分段可变结构的行为不像对象,因此像对象一样使用的结构不应该是分段可变的。另一方面,变量的集合本身就是有用的;一个人应该在需要变量聚合的情况下使用结构,但是应该尽可能地使结构是变量的聚合而不是对象。