[英]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;
我应该如何理解这一行代码?
next
是Node
类型的私有字段
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.