我有一个struct
名为 Node 的类型,如下所示:
struct Node
{
int data;
Node next;
}
当我编译上面的代码时出现编译时错误,但如果我把它变成一个类,一切都很好。
class Node
{
int data;
Node next;
}
两者有什么区别(我知道一个是struct ( value type )
,一个是class(ref type )
)?
我有一个struct
名为 Node 的类型,如下所示:
struct Node
{
int data;
Node next;
}
当我编译上面的代码时出现编译时错误,但如果我把它变成一个类,一切都很好。
class Node
{
int data;
Node next;
}
两者有什么区别(我知道一个是struct ( value type )
,一个是class(ref type )
)?
如果定义class
,Node
则只是引用引用类型Node
。在结构情况下,您有嵌套结构,Node
即在节点中循环嵌套节点。
你曾经用 C 类语言编程过吗?你知道,类/结构和指针等吗?
如果你有,那么请记住:在 C# 中,“类”是“作为指针”传递的,而“结构”是以原始二进制形式传递的,它们就像 C/C++ 中的任何非指针非引用的东西一样被复制。嵌套的所有其他限制都被保留,只是名称不同。
在 C# 中,您可以拥有一个包含“class X”类型字段的“class X”,因为“classes”永远不会直接放在任何地方。这样的字段实际上是一个 4/8 字节的指针/引用。“X 级”的大小很容易确定。相反,在 C# 中,您不能拥有包含“struct X”类型字段的“struct X”。这样的字段将直接嵌入到外部结构中,而不是通过指针/引用。如果“struct X”包含另一个“struct X”,根据它的定义,它肯定会包含另一个“struct X”,该“struct X”将包含……。结束在哪里?你会如何标记结束?当您编写“new X()”时,编译器/运行时如何知道要分配多少空间 ? 就像在 C/C++ 中你不能直接创建递归嵌套类型(你只能通过指针/引用来做到这一点),在 C# 中你不能创建递归结构。