为什么在 C# 中的结构中不能具有相同的结构类型属性
本文关键字:结构 属性 类型 不能 为什么 | 更新日期: 2023-09-27 17:58:36
我有一个名为 Node 的struct
类型,如下所示:
struct Node
{
int data;
Node next;
}
当我编译上面的代码时,我得到编译时错误,但如果我把它作为一个类,一切都很好。
class Node
{
int data;
Node next;
}
两个有什么区别(我知道一个是struct ( value type )
,一个是class(ref type )
(?
你曾经用C级语言编程过吗?你知道,类/结构和指针之类的吗?
如果你有这样,那么请记住:在 C# 中,"类"是"作为指针"传递的,而"结构"是原始二进制形式传递的,它们就像 C/C++ 中任何非指针非引用一样被复制。所有其他嵌套限制都将保留,只是名称不同。
在 C# 中,你可以有一个包含"类 X"类型的字段的"类 X",因为"类"永远不会直接放置在任何位置。这样的字段实际上是一个 4/8 字节的指针/引用。"X类"的大小很容易确定。相反,在 C# 中,不能有包含类型为"struct X"的字段的"结构 X"。这样的字段将直接嵌入到外部结构中,而不是通过指针/引用。如果"结构 X"包含另一个"结构 X",那么它的大小是多少,根据其定义,它肯定会包含另一个包含 ....结局会在哪里?你会如何标记结束?编译器/运行时如何知道在编写"new X(("时要分配多少空间?就像在 C/C++ 中不能直接创建递归嵌套类型(只能通过指针/引用来执行此操作(一样,在 C# 中也不能创建递归结构。
如果定义class
,Node
只是对引用类型Node
的引用。在结构的情况下,你有Node
结构的嵌套,即节点中的循环嵌套节点。