Выделение памяти c#
class Program
{
static Node obj;
static void Main(string[] args)
{
Mem(obj);
Console.WriteLine(obj.x);
Console.ReadKey();
}
public static void Mem( Node obj)
{
obj = new Node();
}
}
class Node
{
public int x;
public Node()
{
x = 5;
}
}
Почему я не могу выделить память под объект методом? объект же передается по ссылке. Но если я в параметрах метода дописываю приставку ref, то все работает.
Ответы (1 шт):
Автор решения: Mark Shevchenko
→ Ссылка
Ссылка это переменная, где хранится адрес объекта. Передача по ссылке означает, что этот адрес копируется из вызывающего метода в вызываемый.
Вы можете менять поля переданного объекта, потому что у вас есть адрес. Но если вы измените саму ссылку, присвоите переменной адрес нового объекта, то переменная obj в вызывающем методе не изменится и продолжит ссылаться на старый объект.
Поэтому приходится использовать ref, который означает, что, фактически, передаваться будет ссылка на ссылку.