我是C#的新程序员。我正在尝试创建一个简单的链接列表作为练习。声明时有什么区别:
Node newNode = new Node();
Node newNode = new Node;
Node newNode;
我看到这些声明到处都是,但有什么区别? 此外,我曾经用C ++编程,指针的使用对于创建LinkedLists至关重要。但是,我听说你几乎从不在C#中使用指针;那怎么工作呢?
由于
答案 0 :(得分:2)
Node newNode = new Node();
将声明空间以引用节点,并为其分配新构造的节点。
Node newNode = new Node;
无效C#,因为C#需要()或赋值列表{}
Node newNode;
将声明空间以引用节点,并将该空间保留为未分配状态。如果在分配之前尝试使用它,您将收到错误。如果您不希望它引用任何Node实例,请为其指定null。
指针在C#中并不常用,但对声明为类的任何对象的所有引用与指针基本相同。声明为struct的对象类型几乎从不指向,它们在被分配时被复制,而声明为class的对象类型总是被指向,并且只有在通过创建新实例明确地这样做时才会被复制。
基本上,在C ++中,变量的声明确定它是否是指针,取决于您是否在C#中使用*,在声明对象类型时确定存储类型。在大多数情况下,您可以将声明为类的任何内容视为指针,将任何声明为结构的内容视为" on-the-stack"。
答案 1 :(得分:1)
// declares newNode as a reference to a newly instantiated instance of the Node() class
Node newNode = new Node();
// not valid syntax....
Node newNode = new Node;
// Declares newNode as a reference to a Node() object that doesn't 'point' anywhere,
// i.e. it's unassigned
Node newNode;
答案 2 :(得分:1)
Node newNode = new Node();
将创建一个新的Node
实例,并在newNode
上存储对它的引用。
Node newNode;
只会声明一个变量但不会被初始化,你可以把它想象成一个C ++未初始化的指针。
最后,Node newNode = new Node;
甚至不是有效的C#,它不会编译。