C#支持值类型和引用类型,但它们都是对象吗?

标签 c# value-type reference-type

我知道 C# 有值和引用类型,但你怎么能这样做:

int age = 100;

string blah = age.ToString();

如果 age 是一个值类型,它怎么会有 ToString 方法呢?它是否仅在内部需要时才转换为对象?

最佳答案

If age is a value type, how does it have a ToString method on it?

允许值类型在其上具有方法。他们为什么不呢? “类型上”的方法只是恰好与特定类型关联的一大块代码;为什么您认为该类型被归类为“引用类型”还是“值类型”很重要?

这不是反问句。我有兴趣了解人们对代码有哪些直觉,尤其是当这些直觉不正确时。通过直观地理解人们犯了什么错误,我们可以尝试提出更直观的更好的抽象。

Does it get converted to an object ONLY when required internally then?

“转换为对象”到底是什么意思?您指的是 “boxed” 吗?

在很多情况下,值类型必须装箱。其中一些很简单——比如当您将值类型转换为对象或接口(interface)时。其中一些是晦涩难懂的。 (在泛型方法中存在奇怪的情况,我们必须以您可能意想不到的方式装箱和拆箱。)

在这种特殊情况下没有装箱。调用直接在值类型上实现的方法只需调用该大块代码。没有必要将事物视为“对象”;我们调用的代码块知道事物的类型。

关于C#支持值类型和引用类型,但它们都是对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1086983/

相关文章:

c# - 传递引用类型对象并更改值

c# - C#中的默认参数传递

C# AD 用户密码过期

c# - 如何使用 C# 将 Sorted DataView 分配给 DataTable 并保持排序状态?

ios - Swift 中的 Equatable 测试

javascript - Sails ORM 不理解数值?

c# - 强制 T 作为代码中的引用类型 [CS0452 错误]

c# - 从虚拟 PC 访问本地 Azure 应用程序以进行跨浏览器测试

c# - 属性更改后何时调用方法

swift - Swift 中的 AnyObject 和 Any