使用self-type数组作为内部属性初始化对象:无限初始化?

时间:2016-11-23 14:58:07

标签: c#

我的问题基本上是关于C#初始化数组的方式。

具体来说,我正在创建一个大型树数据结构来存储C#中的单词。作为node个对象创建的此数据结构的子类有两个字段:int valuenode[] nexts

如果没有初始化node对象,如下所示,在调用this.nexts = new node[26]时会创建一个无限的初始化循环?

/// <summary>
/// Represents a node object for a letter.
/// </summary>
private class node {
    public int value;
    internal node[] nexts;
    public node(bool z, int n = 0, node[] ns = null) {
        this.value = n;
        if (z) {
            if (ns == null) { this.nexts = new node[26]; }
            else { this.nexts = ns; }
        }
    }
}

如果没有,这是初始化一个属性为其自身数组的对象的正确方法,那么在初始化后该数组的每个元素都处于什么状态?

如果您有兴趣,以下是整个课程:

/// <summary>
/// Represents a node object for a letter.
/// </summary>
private class node {
    public int value;
    internal node[] nexts;
    public node(bool z, int n = 0, node[] ns = null) {
        this.value = n;
        if (z) {
            if (ns == null) { this.nexts = new node[26]; }
            else { this.nexts = ns; }
        }
    }
    public node operator++(node n) {
        n.value++;
        return n;
    }
    public node this[int i] {
        get {
            if (this.nexts == null) { this.nexts = new node[26]; }
            return this.nexts[i];
        }
        set {
            if (this.nexts == null) { this.nexts = new node[26]; }
            this.nexts[i] = value;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

  

如果调用this.nexts = new node[26],不会初始化节点对象(如下所示)会创建一个无限的初始化循环吗?

不,因为node引用类型new node[26]只创建一个最多可包含26个node引用的数组;它本身不会创建任何node个对象。

  

如果没有,这是初始化一个属性为其自身数组的对象的正确方法,那么在初始化后该数组的每个元素都处于什么状态?

数组的每个元素都包含null引用。