.net - .NET 中的结构和类有什么区别?

标签 .net class struct value-type reference-type

.NET 中的结构和类有什么区别?

最佳答案

在 .NET 中,有两类类型:引用类型值类型

结构是值类型,类是引用类型

一般区别在于,引用类型位于堆上,而值类型则位于内联位置,即无论变量或字段定义在何处。

包含值类型的变量包含整个值类型值。对于结构体,这意味着变量包含整个结构体及其所有字段。

包含引用类型的变量包含一个指针,或对内存中实际值所在的其他位置的引用

首先,这有一个好处:

  • 值类型始终包含一个值
  • 引用类型可以包含null引用,这意味着它们目前根本不引用任何东西

在内部,引用类型被实现为指针,并且知道这一点,并且知道变量赋值如何工作,还有其他行为模式:

  • 值类型变量的内容复制到另一个变量中,会将整个内容复制到新变量中,从而使两个变量不同。换句话说,复制后,其中一个的更改不会影响另一个
  • 引用类型变量的内容复制到另一个变量中,会复制引用,这意味着您现在有两个对实际数据其他地方相同存储的引用。换句话说,复制后,更改一个引用中的数据似乎也会影响另一个引用,但这只是因为您实际上只是在两个地方查看相同的数据

当您声明变量或字段时,这两种类型的区别如下:

  • 变量:值类型存在于堆栈中,引用类型作为指向堆内存中实际内存所在位置的指针存在于堆栈中(尽管注意 Eric Lipperts article series: The Stack Is An Implementation Detail )。 )
  • 类/结构字段:值类型完全存在于类型内部,引用类型作为指向堆内存中实际内存所在位置的指针存在于类型内部.

关于.net - .NET 中的结构和类有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049/

相关文章:

c# - .NET 中的强类型控件

.net - Winforms & TimeSpan - 哪个控件效果最好?

python - 属性还是方法?

python - 在Python中将字节转换为长整型

c# - 从派生类获取属性的更好方法

.net - 从 .NET 中的构造函数中抛出异常

php - 拉维尔 : Class 'App\DB' not found

python - Django:将 session 数据存储在类变量中是否合理?

c - 这两种结构用法之间的区别

c++ - 打印指向的对象