- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
值类型变量直接包含实际数据,引用类型变量包含对实际数据的引用。
我认为这是:
l.h.s是值类型,r.h.s是引用类型
在左侧,如果我将 i
复制到 j
中,新的内存位置将填充相同的原始数据 (45)。
在右侧,如果我将k
复制到l
,一个新的内存位置将填充对象的引用;并且此引用指向内存中的实际对象。
现在,我对这种引用类型复制感到困惑。这里有一点不同:
这里,r.h.s 上的副本使 l
指向与 k
相同的位置。
我的问题是1。 “哪个更真实?”还是比我想象的更真实?
此外,值类型可以分配在堆上,这取决于抖动认为它适合的方式,然后 2。我们可以强制在堆栈上分配引用类型吗?
抱歉图片编辑草率。
最佳答案
第一张图比较好,l
和k
是不同的变量,在内存中占据不同的位置。
value types may be allocated on heap, depending upon the how jitter sees it fit
实际上它更多地取决于上下文和值的使用方式。值类型字段总是分配在堆上,装箱和闭包是其他原因。
但是,当 l
是一个 ref
参数时,第二张图片适用:
MyClass k = new ...;
M(ref k);
void M(ref MyClass l) { /* Here l is an alias for k */ }
then 2. Can we force a reference type to be allocated on stack?
有类似 stackalloc 的东西,但它是一种对 C# 程序员“不可见”的优化。
简单而最有用的答案是:不。
关于c# - 清除对值和引用类型的疑虑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12341947/
这是我正在学习的 grails 示例, 我有两个域,每当我调用 Controller 时,它都会给我一个错误,我给了他一个 int 但需要一个 package.domain。 用户和其他是测试。其中包
我是一名优秀的程序员,十分优秀!