簡體   English   中英

這兩行有什么區別? (C#)

[英]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.myDatamyData分別引用字段和變量)。

要對此進行分解:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM