泛型参数为Richter代码
本文关键字:代码 Richter 参数 泛型 | 更新日期: 2023-09-27 18:09:42
我学习泛型。Richter LinkedList。我对类初始化有疑问。新增:有2个构造器。首先是null。我们如何用一个构造函数做到这一点?
internal sealed class Node<T>
{
public T m_data;
public Node<T> m_next;
public Node(T data) : this(data, null)
{
}
public Node(T data, Node<T> next)
{
m_data = data; m_next = next;
}
public override String ToString()
{
return m_data.ToString() + ((m_next != null) ? m_next.ToString() : String.Empty);
}
}
是什么?
public Node(T data) : this(data, null)
{
}
特别是(T data)
为什么我能做到?
public Node(T data, Node<T> next)
{
m_data = data; m_next = null;
}
但我不能做
public Node(T data, Node<T> next)
{
m_data = null; m_next = next;
}
如何用一个构造函数实现?
可以在构造函数
中使用可选参数internal sealed class Node<T> {
public T m_data;
public Node<T> m_next;
public Node(T data, Node<T> next = null) {
m_data = data;
m_next = next;
}
public override String ToString() {
return m_data.ToString() + ((m_next != null) ? m_next.ToString() : String.Empty);
}
}
允许像
这样的用法var node1 = new Node<string>("hello world"); //the same as (data, null)
var node2 = new Node<string>("how are you", node1);
public Node(T data) : this(data, null)
是什么?
它叫做构造函数链接/重载。
看看c#构造函数链?(怎么做?)
这是一个从LinkedList中截取的例子。
T
是您的类型的占位符。因此,如果您使用Node<int>
,则将类型设置为整数-这是通用的。data
是构造函数中的变量名。
Node<int> foo = new Node<int>(1);
的使用情况与你可能熟悉的List<int> foo = new List<int>();
相同
有2个构造函数。首先是null。我们怎么用1来做呢构造函数?
如果不需要,可以删除一个,或者设置一个默认值来替换两个:
public Node(T data, Node<T> next = null)
{
m_data = data; m_next = next;
}