每当我试图搜索 C# 或 .net 中的类和结构之间的差异时,我最终得到的是对值类型或引用类型这两种事物的概念性概述,以及变量的分配位置等。但我需要一些实际差异。我发现了一些类似赋值运算符的不同行为,具有构造函数等。任何人都可以提供一些更实际的差异,这些差异将在编码时直接有用吗?就像事物适用于一个但不适用于其他或显示不同行为的相同操作。以及关于这两者的一些常见错误。
另请建议在何处考虑使用结构而不是类。以及不应在何处使用结构。
编辑: 我必须显式调用构造函数还是只声明一个结构类型变量就足够了?(我应该把它作为一个新问题吗?)
最佳答案
好的,这里有一些具体的、实际的区别:
如果变量是类,它可以是null,但如果它是struct,则永远不会是null。
default(T)
是null
对于类,但对于结构实际上构造了一个值(由许多二进制零组成)。可以使用
Nullable<T>
使 struct 可以为空或T?
. 类 不能用于T
在Nullable<T>
或T?
.struct 始终 具有公共(public)默认构造函数(具有零参数的构造函数)。程序员不能用自定义实现覆盖这个构造函数——它基本上是“一成不变的”。 类允许程序员没有默认构造函数(或私有(private)构造函数)。
类 中的字段可以声明默认值。在结构中,它们不能。
一个类可以继承自另一个类,但是一个struct不能被声明为派生自任何东西(它隐含地派生自
System.ValueType
)。在
object.ReferenceEquals()
中使用类 是有意义的,但使用 struct 变量将始终产生 false。在
lock()
中使用 class 是有意义的声明,但使用 struct 变量会导致非常微妙的失败。密码不会被锁定。在 32 位系统上,理论上您可以将最多 536,870,912 个引用的数组分配给一个类,但对于一个结构 您需要考虑结构的大小,因为您正在分配实际的实例。
关于c# - .net 中类和结构之间的实际区别(不是概念上的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2750075/