为什么我不能在C#中的struct中使用相同的struct type属性?

时间:2013-02-11 15:32:11

标签: c#

我有一个名为Node的struct类型,如下所示:

struct Node
{
    int data;
    Node next; 
}

当我编译上面的代码时,我得到编译时错误但是如果我把它变成一个类,一切都很好。

class Node
    {
        int data;
        Node next; 
    }

两者之间有什么区别(我知道一个是struct ( value type ),一个是class(ref type ))?

2 个答案:

答案 0 :(得分:3)

如果您定义classNode只是对引用类型Node的引用。在结构情况下,你有Node的嵌套i.n.节点中的循环嵌套节点。

答案 1 :(得分:3)

你有没有用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#中你不能创建递归结构。