要使用结构,我们需要实例化结构并像使用类一样使用它.那为什么我们不首先创建一个类?
struct是一个值类型,所以如果你创建一个副本,它实际上会物理复制数据,而对于一个类,它只会复制对数据的引用
语义之间的主要差异class
,并struct
是struct
■找值语义.这意味着如果你有两个相同类型的变量,它们每个都有自己的数据副本.因此,如果给定值类型的变量设置为等于另一个(相同类型),则对一个的操作不会影响另一个(即,值类型的赋值会创建副本).这与参考类型形成鲜明对比.
还有其他差异:
值类型是隐式的sealed
(不可能从值类型派生).
值类型不能null
.
值类型被赋予一个默认构造函数,将值类型初始化为其默认值.
值类型的变量始终是该类型的值.将此与类型的变量进行对比,其中类型的变量A
可以引用类型的实例,B
如果B
派生自A
.
由于语义的不同,将struct
s称为"轻量级类" 是不合适的.
在C#中,struct是一种值类型,与引用类型的类不同.这导致它们的处理方式或预期如何使用它们的巨大差异.
你应该读一本书中的结构.C#中的结构不像C++或Java那样是类的近亲.
我在其他答案中看到的所有原因都很有趣并且很有用,但是如果你想了解它们为什么是必需的(至少是VM)以及为什么JVM不支持它们是错误的(用户 -定义的值类型),阅读Demystifying Magic:高级低级编程.就目前而言,C#在谈论将安全的托管代码引入系统编程的潜力时会熠熠生辉.这也是我认为CLI是移动计算的优越平台[比JVM]的原因之一.链接文件中列出了其他一些原因.
重要的是要注意,如果有的话,你很少会看到使用结构时可观察到的性能提升.垃圾收集器非常快,在许多情况下实际上会超过结构.当你添加它们的细微差别时,它们肯定不是首选工具.但是,当您确实需要它们并具有探查器结果或系统级构造来证明它时,他们就可以完成工作.
编辑:如果你想要回答为什么我们需要他们而不是他们做什么,^^^