c#和.net中,类声明和成员变量的数据类型与类名相同
本文关键字:数据类型 成员 net 声明 变量 | 更新日期: 2023-09-27 18:15:32
我正在尝试学习并可能掌握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协助。
您可以声明与类类型相同的成员变量,因为,您可以这样做。在编译器级别,它只是查看是否声明了该类型,当然,它已经声明了!请注意,这是C、c++的特性,如果我不得不猜测的话,也是所有其他面向对象语言的特性。
您需要知道的一件事是,引用类型的默认值是null
。这意味着在创建LinkedListNode
时,这些成员变量为空。这避免了递归构造循环(这可能是您感到困惑的地方)。这段代码:
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的一个很好的方法,因为构造函数创建了一个相同类型的新对象,无限。
简而言之,这是一件非常正常的事情(只需观察潜在的递归),您应该习惯看到。