首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这段代码是如何工作的?在这里,类名在它自己的实现中用作数据类型

这段代码是如何工作的?在这里,类名在它自己的实现中用作数据类型
EN

Stack Overflow用户
提问于 2020-04-25 03:05:39
回答 4查看 91关注 0票数 1
代码语言:javascript
复制
public class Node
{
    public int Value { get; set; }
    public Node Next { get; set; }
}

我是一个完全的编程初学者。我决定学习C#作为我的第一门编程语言。我偶然发现了这段代码。

如何将'Node‘定义为Next的数据类型?这让我很困惑。

EN

回答 4

Stack Overflow用户

发布于 2020-04-25 03:27:59

在学习C#的过程中,这是一个很好的问题。关键是C#中有两种类型:“值”类型和“引用”类型。参见this question and its answers for more details

因为Node被声明为class,这意味着它是一个引用类型。如果将变量设置为引用类型,则该变量不会直接保存数据;相反,它会保存一个可以指向数据的引用。默认情况下,引用具有特殊的值null,这意味着它们不指向任何东西。当你给一个变量赋值时,比如myNode.Next = someOtherNode,你不会把整个someOtherNode复制到Next属性中;你只需要把对someOtherNode的引用复制到这个属性中。

因此,由于Node类本身具有Node属性,因此Node对象实际上并不包含另一个Node对象。第一个对象包含对第二个对象的引用。这允许一个节点指向另一个节点,然后该节点可以指向另一个节点,依此类推。以这种方式组织的节点集合称为链表;在本例中,它是int (32位整数)值的链表。

如果Node是一个值类型(声明为struct而不是class),那么确实会有问题。值类型变量直接包含数据,因此您不能拥有包含同一值类型的另一个实例的值类型的实例。

票数 1
EN

Stack Overflow用户

发布于 2020-04-25 03:32:25

像其他答案一样,这个类表示链表的一个节点。在这种情况下,Node可以指向节点的另一个实例。

代码语言:javascript
复制
Node 
{
   int Value = 1;
   Node Next =============>  Node {
}                                   int Value = 2;
                                    Node Next ===========> Node {
                                  }                                int Value = 3;
                                                                   Node Next =======> null
                                                                 }

您通常不会遇到像Node这样具有自身引用的类。

票数 1
EN

Stack Overflow用户

发布于 2020-04-25 03:08:52

这被称为链表,递归数据结构的一个例子。这可以很容易地在C#中实例化,因为可以通过让列表中的最后一个节点为Next属性的空值来结束递归。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61415677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档