是否可以将引用存储到类实例中?
class Node
{
public int id;
public int value;
public List<Node> neighbours;
}
如何填充列表neighbours
,以便我对Node
实例所做的任何更改都会反映在那里?
答案 0 :(得分:17)
public List<Node> neighbours;
由于您的Node
类是引用类型,因此Node
类型的所有变量只包含引用(就像指针一样)到Node
对象中内存 - 所以邻居列表包含<{>>对象的列表 - 对这些对象的任何更改都将反映在列表中,因为它们指向您修改的对象。 / p>
另见Value Types and Reference Types:
数据类型是值类型 将数据保存在自己的内存中 分配。引用类型包含 指向另一个内存位置的指针 保存数据。
修改以发表评论:
如前所述,Node
类是引用类型,所有类类型都是。我再次引用MSDN:
结构似乎与类相似, 但是有重要的区别 你应该知道的。首先 所有,类都是引用类型和 结构是值类型。通过使用 结构,你可以创建对象 表现得像内置类型和 也享受他们的好处。
现在这对你意味着什么? Node
类型的大小是其成员的组合大小,与struct
类型不同,它不指向内存地址。使用class
将改变类型行为的语义 - 如果将一个结构实例分配给另一个相同类型的结构(对于任何其他值类型相同),struct
中的所有值都将从一个到另一个,你仍然有两个单独的对象实例。 - 另一方面,对于参考类型,之后指向同一个对象。
示例节点是struct
:
class
示例节点是Node node1 = new Node() { id = 1, value = 42};
Node node2 = node1;
node2.value = 55;
Console.WriteLine(node1.value); //prints 55, both point to same,modified object
:
struct
答案 1 :(得分:2)
如果你有
Node node = new Node{Id =1, Value = 1};
node.neighbours = new List<Node>();
Node neighbourNode = new Node{Id =1, Value = 1};
node.neighbours.Add(neighbourNode);
您可以在将neighbourNode
添加到node
之后更改{{1}},并且由于您要存储参考,它将反映在列表的项目中。