Выделение памяти 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, который означает, что, фактически, передаваться будет ссылка на ссылку.

→ Ссылка