繁体   English   中英

链表和通用类型

[英]Linked-list and generic type

我正在学习C#泛型类型,并且对MSDN网站上的泛型模块中的链接列表示例感到非常困惑: http : //msdn.microsoft.com/en-us/library/0x6a29h6.aspx

我在这里粘贴了代码:我的困惑是关于:

private Node next;

我应该如何理解这一行代码? 我只能认为这是用类名创建的私有字段?

 public Node Next                   
 {
   get { return next; }
   set { next = value; }
 }

我想这是一个以类名作为类型的属性?

private Node head;  

为什么嵌套的类名出现在应该是head类型的位置? 这是GenericList<T>类的私有字段吗?

// type parameter T in angle brackets 
public class GenericList<T> 
{
    // The nested class is also generic on T. 
    private class Node
    {
        // T used in non-generic constructor. 
        public Node(T t)
        {
            next = null;
            data = t;
        }

        **private Node next;**    // How should I
        public Node Next
        {
            get { return next; }
            set { next = value; }
        }

        // T as private member data type. 
        private T data;

        // T as return type of property. 
        public T Data  
        {
            get { return data; }
            set { data = value; }
        }
    }

    private Node head;

    // constructor 
    public GenericList() 
    {
        head = null;
    }

    // T as method parameter type: 
    public void AddHead(T t) 
    {
        Node n = new Node(t);
        n.Next = head;
        head = n;
    }

    public IEnumerator<T> GetEnumerator()
    {
        Node current = head;

        while (current != null)
        {
            yield return current.Data;
            current = current.Next;
        }
    }
}
 private Node next; 

我应该如何理解这一行代码?

nextNode类型的私有字段

 public Node Next { get { return next; } set { next = value; } } 

我想这是一个以类名作为类型的属性?

这是一个名为Next的属性,其类型为Node

 private Node head; 

为什么嵌套的类名出现在应该是head类型的位置?
这是GenericList<T>类的私有字段吗?

因为它是head的类型,是的,这是外部类的私有字段。

这里没有什么特别的,一个类可以具有与自身类型相同的字段,属性等

编辑有关注释“通过创建嵌套类类型Node的字段,它如何使代码工作?(...)加字段'next'被定义为null,无论何时创建Node实例”

所有的“魔术”都位于AddHead方法中。
当你创建一个实例GenericList(比如GenericList)在第一head为空
因此,在执行此步骤后,我们可以说列表可以表示为[]

然后例如调用AddHead(1); 它会使用该值创建一个Node,然后将其设置为当前头部的Next ,最后将新创建的Node作为新头部。
因此,在此步骤之后,列表为: 1-> [] (带有1的头链接到它的下一个节点;空节点又称为空列表)

之后,如果您再次调用AddHead并说2; 您将以类似以下内容结束: 2-> 1-> []

并且当需要进行迭代时,您只需在头部不为空(也称为null)时循环,读取其存储的值,然后将链接的节点(其下一个)用作“新头部”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM