.NET中的结构和类别有什么区别?
答案
在.net中,有两类类型,参考类型 和价值类型。
结构是价值类型 和课程参考类型。
一般的区别是参考类型 生活在堆上,一个值类型生活在线,也就是说,它是您的变量或字段的定义。
一个包含一个的变量值类型 包含整个值类型价值。对于结构,这意味着该变量包含整个结构以及其所有字段。
一个包含一个的变量参考类型 包含指针或参考到实际值所在的内存中的其他地方。
首先,这有一个好处:
- 值类型总是包含一个值
- 参考类型 可以包含一个无效的 - 参考,这意味着他们目前根本没有提及任何东西
在内部参考类型s被用作指针,知道这一点,并且知道可变分配的工作原理,还有其他行为模式:
- 复制一个内容值类型变量为另一个变量,将整个内容复制到新变量中,从而使两个变量不同。换句话说,在副本之后,变为一个不会影响另一个
- 复制一个内容参考类型 变量到另一个变量,复制参考,这意味着您现在有两个引用对同一的引用别的地方实际数据的存储。
当您声明变量或字段时,这是两种类型的不同之处:
- 多变的:值类型 生活在堆上,参考类型 将其生活在堆栈上,作为指向实际记忆存在的堆里的某个地方的指针(尽管注意Eric Lipperts文章系列:堆栈是实现细节)
- 类/结构场:值类型 完全生活在类型中,参考类型将其生活在类型内部,作为指向实际记忆生活的堆内存中某个地方的指针。