【发布时间】:2010-10-01 00:11:19
【问题描述】:
更新所以完全拉了一个工具的时刻。我真正的意思是参考与输出/参考。任何说“参考”的东西,我真正的意思是参考,如
SomeMethod(对象 someObject)
对比
SomeMethod(out someObject)
对不起。只是不想更改代码,所以答案已经有意义。
据我了解,与 ref 不同,它“复制”指针并在堆栈上创建一个新空间以使用该指针,但不会更改指针:
SomeMethod()
{
SomeThing outer = new SomeThing();
RefMethod(ref outer)
}
RefMethod(ref inner) //new space on stack created and uses same pointer as outer
{
inner.Hi = "There"; //updated the object being pointed to by outer
inner = new SomeThing();//Given a new pointer, no longer shares pointer with outer
//New object on the heap
}
Out 复制指针并可以操纵它指向的位置:
SomeMethod()
{
SomeThing outer = new SomeThing();
RefMethod(out outer)
}
RefMethod(out inner) //same pointer shared
{
inner = new SomeThing();//pointer now points to new place on heap
//outer now points to new object
//Old object is orphaned if nothing else points to it
}
对对象来说这很好,但值类型怎么办?
【问题讨论】:
标签: c# stack heap-memory out-parameters