c# - c#中的引用类型和值类型有什么区别?

标签 c# .net value-type reference-type

几个月前有人问过我这个问题,我无法详细解释。 C# 中的引用类型和值类型有什么区别?

我知道值类型是intboolfloat等,引用类型是delegateinterface 等。还是这也是错误的?

你能用专业的方式给我解释一下吗?

最佳答案

您的示例有点奇怪,因为虽然 intboolfloat 是特定类型,但接口(interface)和委托(delegate)是 种类 类型 - 就像 structenum 是各种值类型一样。

我写了引用类型和值类型的解释in this article .我很乐意对您感到困惑的任何部分进行扩展。

“TL;DR”版本是考虑特定类型的变量/表达式的值是什么。对于值类型,值就是信息本身。对于引用类型,值是一个引用,它可以是 null 或者可以是一种导航到包含信息的对象的方式。

例如,将变量想象成一张纸。它可以在上面写上值“5”或“false”,但它不能有我的房子……它必须有到我家的方向。这些方向相当于一个引用。特别是,两个人可能有不同的纸,上面写着相同的去我家的方向——如果一个人按照这些方向把我的房子涂成红色,那么第二个人也会看到这种变化。如果他们在纸上都有我家的不同图片,那么一个人给他们的纸上色根本不会改变另一个人的纸。

关于c# - c#中的引用类型和值类型有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057267/

相关文章:

c# - 如果我在代码中设置一些值,我仍然可以使用 UpdateModel() 吗?

c# - .Net 测试项目的用户特定数据和 secret 数据存储在哪里?

c# - MonoTouch 从 subview 设置位置

c# - 为什么 C# 中的空结构会消耗内存

c# - 二维数组跨语言 C++ 和 C#

c# - 替换一个字符串中的几个子串

c# - BindingList<> 更改时 UI 未更新

c# - 为什么我不能在 lambda 表达式中使用 null 传播运算符?

c# - WCF 服务引用命名空间与原始命名空间不同

c# - 使用比较运算符,例如 '!=' 和 '==' ,泛型在 C# 中被限制为值