指向C#中的类实例的指针

roh*_*t89 3 c# pointers

是否可以将引用存储到类实例中?

class Node
{
    public int id;
    public int value;
    public List<Node> neighbours;
}
Run Code Online (Sandbox Code Playgroud)

如何neighbours以这样的方式填充列表:我对Node实例所做的任何更改都将反映在那里?

Bro*_*ass 17

public List<Node> neighbours;
Run Code Online (Sandbox Code Playgroud)

由于您的Node类是引用类型类型的所有变量Node将只包含引用(就像一个指针)到Node内存中的对象-这样的邻居列表中包含的列表的引用您的Node任何改变,这些对象将在被反映对象-列表,因为它们指向您修改的对象.

另请参阅值类型和引用类型:

如果数据类型将数据保存在其自己的内存分配中,则该数据类型是值类型.引用类型包含指向保存数据的另一个内存位置的指针.

编辑以发表评论:

如上所述,您的Node类是引用类型,所有类类型都是.我再次引用MSDN:

结构可能看起来类似于类,但是您应该注意一些重要的区别.首先,类是引用类型,结构是值类型.通过使用结构,您可以创建行为类似于内置类型的对象,并享受它们的好处.

那对你来说意味着什么?一个的尺寸struct的类型是其成员的组合的大小,它不指向的存储器地址,不像class类型.使用a 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
Run Code Online (Sandbox Code Playgroud)

示例节点是struct:

Node node1 = new Node() { id = 1, value = 42};
Node node2 = node1;

node2.value = 55;
Console.WriteLine(node1.value); //prints 42, separate objects
Run Code Online (Sandbox Code Playgroud)