ОБНОВЛЕНИЕ Итак, полностью вытащил момент инструмента. Я действительно имел в виду под ссылкой против Out / Ref. Все, что говорит 'ref', я действительно имел в виду под ссылкой, как в
SomeMethod (Объект someObject)
Versus
SomeMethod (из 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
}
С объектами все в порядке, но как насчет типов значений, поскольку им нечего указывать на то, что они находятся только в стеке?