C#和.NET,类声明和成员变量与类名具有相同的数据类型

时间:2014-07-29 15:38:00

标签: c# .net

我正在努力学习并且可能掌握C#,我遇到了下面的课程和成员声明,​​无法解决这个问题。

public class LinkedListNode {
    public LinkedListNode(object value) // I know this is constructor
        { 
        this.Value = value;
        }

    public object Value { get; private set; } //member variable of type object

    public LinkedListNode Next { get; private set; }    //??? how can we declare a member variable type same as class name?? how does this works?
    public LinkedListNode Prev { get; internal set; } // class name us LinkedListNode and the member variable also has data-type LinkedListNode, im confused.
}

我在C#的书籍中遇到过这段代码。 Kinldy协助。

1 个答案:

答案 0 :(得分:0)

您可以声明与该类型相同的成员变量,因为您可以。在编译器级别,它只是查看是否声明了该类型,当然,它是!请注意,这是C,C ++的一个特性,如果我不得不猜测,还有其他所有面向对象的语言。

您需要知道的一件事是引用类型的默认值是null。这意味着在创建LinkedListNode时,这些成员变量为null。这避免了递归构造循环(这可能是你感到困惑的)。这段代码:

public class LinkedListNode {
    public LinkedListNode(object value) // I know this is constructor
        { 
           this.Value = value;
           Next = new LinkedListNode("test"); //DONT DO THIS!!!
        }

    public object Value { get; private set; } //member variable of type object

    public LinkedListNode Next { get; private set; }    //??? how can we declare a member variable type same as class name?? how does this works?
    public LinkedListNode Prev { get; internal set; } // class name us LinkedListNode and the member variable also has data-type LinkedListNode, im confused.
}

获取StackOverflowException是一种非常好的方法,因为构造函数会无限制地创建一个相同类型的新对象。

简而言之,这是一件非常正常的事情(只是观察潜在的递归),这是你应该习惯的事情。