泛型参数为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;
        }

泛型参数为Richter代码

如何用一个构造函数实现?

可以在构造函数

中使用可选参数
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;
}