[英]What's the difference between these two lines? (C#)
在下面的斜體代碼中,為什么不將“ IntIndexer”放在myData = new string [size]前面? 因為Customer cust = new Customer(); (假設客戶是該類的名稱):
*Customer cust = new Customer();*
使用系統;
/// <summary>
/// A simple indexer example.
/// </summary>
class IntIndexer
{
private string[] myData;
public IntIndexer(int size)
{
*myData = new string[size];*
for (int i = 0; i < size; i++)
{
myData[i] = "empty";
}
}
第一行( cust
)是聲明和初始化字段或變量。
在第二個示例中,針對類型聲明字段( myData
),並將其初始化為構造函數( IntIndexer(...)
)。 如果(在構造函數中)在其前面放置了一個類型,則將聲明一個具有相同名稱的局部變量。 這將造成混亂(然后您必須使用this.myData
和myData
分別引用字段和變量)。
要對此進行分解:
Customer cust = new Customer();
這可以分為兩部分:
Customer cust;
cust = new Customer();
第一行說,名稱cust
將能夠引用類型Customer
對象。 第二行創建一個新的Customer
對象,使得cust
參考。
您提供的另一個示例已經分為兩個部分:
private string[] myData;
和:
myData = new string[size];
如果字符串數組的長度是恆定的,我們也可以在IntIndexer
(在構造方法之前)將其折疊到一行上。
private string[] myData = new string[100];
但是我們需要使用傳遞給IntIndexer
構造函數的size
,因此我們必須將聲明和初始化分為兩個步驟。
您是否要在自身內部調用構造函數? 就像您要實例化IntIndexer一樣,您必須調用此函數並重復該過程,直到您意識到這將導致堆棧溢出或永不終止,因為它將一直嘗試創建第n個實例,因為n一直在不斷前進。起來
如果僅以這種方式跟蹤,您的示例中缺少什么?
他們是兩回事。 myData已聲明為string[]
類型,而不是IntIndexer
類型。
IntIndexer
類包含一個名為myData
的變量。 它們不相等。
無論如何,您也不會將類型放在該行代碼的前面,因為您將重新聲明該變量。 這樣做會給您一個編譯器錯誤。
myData已經被聲明為IntIndexer類的字段,因此您不必在構造函數中重新聲明它。 該類了解它正在引用自己的字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.