我知道 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/