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