2017-02-17 66 views
0

我是C#的新程序員。我正在嘗試創建一個簡單的鏈接列表作爲練習。你聲明的區別是什麼:在C#中聲明鏈接列表節點的不同方法

Node newNode = new Node(); 

Node newNode = new Node; 

Node newNode; 

我看到這些聲明到處都是,但是有什麼區別?另外,我曾經使用C++進行編程,並且指針的使用在創建LinkedLists中至關重要。不過,我聽說你幾乎從不在C#中使用指針;那麼如何工作?

感謝

+3

'Node newNode = new Node;'無效C# – Gusman

回答

2
Node newNode = new Node(); 

將聲明空間以引用節點,併爲其分配新構造的節點。

Node newNode = new Node; 

是無效的C#,因爲C#要求是()或分配列表{}

Node newNode; 

將宣佈空間到節點的參考,並留下空間分配。如果您在分配之前嘗試使用它,您將會收到錯誤。如果您不想引用Node的任何實例,請將null指定給它。

指針在C#中並不常用,但對任何聲明爲類的對象的引用基本上都與指針相同。聲明爲struct的對象類型幾乎從不指向,它們在分配時被複制,而聲明爲類的對象類型始終指向並且只有在通過創建新實例明確地進行復制時才被複制。基本上,在C++中,變量的聲明決定它是否爲指針,具體取決於在C#中是否使用*,在聲明對象類型時確定存儲類型。對於大多數目的,您可以將任何聲明爲類的指針視爲指針,並將任何聲明爲結構的任何內容視爲「棧上」。

+0

我會補充一點,這個關於類和結構的事實是爲什麼你可以將null分配給聲明爲類的任何類型,但是不能將null分配給聲明爲一個結構。 –

+0

哦,而且我還假設Node被聲明爲一個類,因爲我說的是將null賦值給它。由於您正在構建鏈接列表,因此您需要將您的節點聲明爲一個類,以便您可以在列表結束時指定null。 –

+0

感謝您的快速反饋,這非常有幫助。 –

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; 
1

Node newNode = new Node();將創建一個新Node實例,並存儲在newNode對它的引用。

Node newNode;將只聲明一個變量,但不會被初始化,你可以把它想象成一個C++未初始化的指針。

最後,Node newNode = new Node;甚至不是有效的C#,它不會編譯。