我知道值类型和引用类型之间的一般区别,我也知道在引用类型中使用值类型时,此值类型实际上在堆上。
前任:
class ClassA{
public DateTime date1 = new DateTime(2008, 3, 1, 7, 0, 0);
}
什么时候
ClassA a = new ClassA();
日期 1 在堆上
我的问题是
如果我们在方法中使用此 date1 作为参数,则内存位置行为是什么?
public void methodA(DateTime dt)
{
//do sth with the dt
}
调用方法
methodA(new ClassA().date1);
选项 1:仅复制一个 date1 引用选项 2:或复制要运行的 date1 数据
更新:在阅读了"关于价值类型的真相"之后,我意识到我的假设存在一些不确定性。至少我应该给出一个这样的背景。"在桌面 CLR 上的 C# Microsoft实现中,当值是局部变量或临时变量(不是 lambda 或匿名方法的封闭局部变量)并且方法主体不是迭代器块并且抖动选择不注册值时,值类型将存储在堆栈上。"
更新2:我问这个问题的原因是我想了解一些关于 http://marcgravell.blogspot.co.uk/2011/10/assault-by-gc.html 的代码片段
将客户从类更改为结构体(仅在此疯狂代码中)
将主商店从列表更改为客户[]
将子集从"列表"更改为"列表",特别是 偏移到主客户[]
void SomethingComplex(ref Customer customer) {...}
...
int custIndex = ...
SomethingComplex(ref customers[custIndex]);
DateTime
是一种值类型,因此该值将在方法调用时复制。