我正在学习C#泛型类型,我对MSDN网站上的Generic模块中的链表示例感到困惑: 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;
}
}
}
答案 0 :(得分:0)
private Node next;
我该如何理解这行代码?
next
是Node
public Node Next { get { return next; } set { next = value; } }
我猜这是一个类名作为其类型的属性?
这是一个名为Next
的属性,其类型为Node
private Node head;
为什么嵌套的类名出现在应该是头部类型的位置?
这是一个班级GenericList<T>
的私人领域吗?
因为它是head
的类型,是的,它是外部类的私有字段。
这里没什么特别的,一个类可以有与自身类型相同的字段,属性等
编辑 关于评论“如何通过创建嵌套类类型节点的字段来使代码工作?(...)加上字段'next '无论何时创建Node实例,都被定义为null“
所有“魔法”都在AddHead方法中
当你创建一个实例GenericList(比如GenericList)时,head
为空
所以在这一步之后我们可以说列表可以表示为 []
然后你调用AddHead(1)作为例子;它创建一个具有该值的Node,然后将它设置为当前头的,最后将新创建的Node作为新头。
所以在这一步之后,列表是: 1 - &gt; [] (带有1的头部链接到它的下一个节点;空节点也称为空列表)
之后如果再次拨打AddHead,请说2;你会以这样的结尾结束: 2 - &gt; 1 - &gt; [] 强>
当有时间迭代时你只需要在头部不为空(即null)时循环,读取它的存储值并使用链接节点(它的下一个)作为“新头”