c# - .net 中类和结构之间的实际区别(不是概念上的)?

标签 c# .net class struct

每当我试图搜索 C# 或 .net 中的类和结构之间的差异时,我最终得到的是对值类型或引用类型这两种事物的概念性概述,以及变量的分配位置等。但我需要一些实际差异。我发现了一些类似赋值运算符的不同行为,具有构造函数等。任何人都可以提供一些更实际的差异,这些差异将在编码时直接有用吗?就像事物适用于一个但不适用于其他或显示不同行为的相同操作。以及关于这两者的一些常见错误。

另请建议在何处考虑使用结构而不是类。以及不应在何处使用结构。

编辑: 我必须显式调用构造函数还是只声明一个结构类型变量就足够了?(我应该把它作为一个新问题吗?)

最佳答案

好的,这里有一些具体的、实际的区别:

  • 如果变量是,它可以是null,但如果它是struct,则永远不会是null。

  • default(T)null对于,但对于结构实际上构造了一个值(由许多二进制零组成)。

  • 可以使用 Nullable<T> 使 struct 可以为空或 T? . 不能用于 TNullable<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/

相关文章:

c# - 加载配置文件时如何修复 "Configuration system failed to initialize/Root element is missing"错误?

c# - 致专家:此代码有何区别?

c# - 大文件上传(WebException : The connection was closed unexpectedly)

C++ 从 regex_iterator 获取匹配项

php - 什么时候方法应该是静态的? PHP

c# - 用 ADO.NET 编写的数据库事务何时真正开始?

c# - 如何要求正在运行的进程打开文件?

javascript - 使用 CoffeeScript 在 “private method” 类中获取 “public function”

c# - 使我的 COM 程序集调用异步

.net - Visual Studio 单元测试访问器,如何在不关闭 VS 的情况下重新生成它们?