【发布时间】:2019-01-21 00:40:41
【问题描述】:
假设你只有不可变类型
并且您的所有代码都已更新到 C# 7.3,并且您的方法使用 in 关键字作为输入
为什么你会使用类而不是只读结构?
使用结构的缺点是复制成本很高,但假设您防止任何复制(防御性编译器复制或由代码表示),只读结构允许您仅复制引用(就像类一样)并避免堆分配和压力在垃圾收集器上。
排除特殊情况(我猜它可能是一个无法放入堆栈的非常大的对象)您通常会使用只读结构作为首选吗?
我感兴趣的案例是将它们用作数据容器。
【问题讨论】:
-
因为你想通过引用访问和编辑同一个对象?
-
选择
struct或class,首先要根据您是想要value 语义还是reference 语义来选择。 -
您采用了有限范围的用例,并尝试根据它们提出一般性问题。引用类型不仅仅是数据容器。
-
结构应该代表值。具有相同字段值的结构的所有实例都是“相同的”并且可以互换(例如,所有
5s 都是相同的)。类代表对象。他们有一个固有的“身份”,这不是他们包含的数据的一部分。即使您有两个具有相同数据的实例,它们至少在某些方面也不“相同”。 -
@jrh - 是的,他们会在很多方面表现得那样。不过,我仍然可以将它们与老
ReferenceEquals分开 :-)