Это хороший вопрос, когда вы узнаете о C#. Ключ в том, что в C# есть два типа типов: типы «значения» и «ссылочные» типы. См. этот вопрос и ответы на него для более подробной информации .
Поскольку Node
объявлен как class
, это означает, что это ссылочный тип. Если вы создадите переменную со ссылочным типом, то эта переменная не будет содержать данные напрямую; вместо этого он содержит ссылку , которая может указывать на данные. По умолчанию ссылки имеют специальное значение null
, что означает, что они ни на что не указывают. Когда вы присваиваете переменную, например, myNode.Next = someOtherNode
, вы не копируете всю совокупность someOtherNode
в свойство Next
; вы просто копируете ссылку на someOtherNode
в свойство.
Таким образом, если сам класс Node
имеет свойство Node
, объект Node
фактически не содержит другого объекта Node
. Первый объект содержит ссылку на второй объект. Это позволяет одному узлу указывать на другой узел, который затем может указывать на другой узел и т. Д. Совокупность узлов, организованных таким образом, называется связанным списком ; в данном случае это связанный список int
(32-разрядных целых) значений.
Если Node
был типом значения (объявленным как struct
вместо class
), тогда действительно будет проблема. Переменные типа значения содержат данные напрямую, поэтому вы не можете иметь экземпляр типа значения, который содержит другой экземпляр того же типа значения.