答案 0 :(得分:11)
我几乎从不定义自定义结构。 IMO没有那么多自然价值类型。
特别是,在定义可变结构之前,我会非常认真地非常,特别是如果它通过接口实现进行变异。可变结构的行为方式完全是人们根本没想到的,导致代码难以理解。
我认为值得从"Choosing Between Classes and Structures"阅读"Design Guidelines For Developing Class Libraries"。
特别是:
除非是,否则不要定义结构 type具有以下所有内容 特性:
逻辑上代表一个单一的 值,类似于原始类型 (整数,双数等)。
它的实例大小小于 16个字节。
这是不可改变的。
不必频繁装箱。
您是否经常开发具有所有这些特征的类型?
答案 1 :(得分:11)
您应该对结构进行以下考虑:
Equals
和GetHashCode
方法以获得更好的效果IEquatable<T>
界面==
以及!=
运营商答案 2 :(得分:4)
它们不像类那样适合面向对象的编程范例。它们适用于小型数据结构,但我使用的是类以外的任何类型。
答案 3 :(得分:0)
我认为结构的主要目的 - 只保留变量类型。如果你把一些类保留在struct中 - 你错了。
答案 4 :(得分:0)
结构的使用应限于当您真正需要的只是一个小型数据结构时。 (正如你所读)。我只会将它们用于最小的数据结构,如坐标,偏移,有时用于图形。
在很多方面,你可以认为C#中的结构类似于缩小的类。它们与类基本相同,但设计的更多用于您只想将一些数据组合在一起的情况。他们 通过以下方式与课程不同: 要记住的一些事情
答案 5 :(得分:0)
问自己以下关于使用结构建模的数据集的问题:
我想如果你能对所有这些问题尽心尽力地回答“不”,那么没有充分的理由不使用结构。我认为人们在某些情况下使用静态子类,其中结构足够好。
答案 6 :(得分:0)
类比结构更容易实现。如果你错误地实现了一个结构,它会给你一些意想不到的错误。
结构不应大于16个字节,否则会失去大部分性能优势。
结构体是一种值类型,表示某种形式的单个实体。
结构应该是不可变的。这意味着您永远不会更改结构中的某个属性。如果你想要一个不同的struct值,你可以创建一个新值。