簡體   English   中英

關於C#中構造函數的問題

[英]question about constructors in C#

你好
關於名為Square的類中的部分代碼:

public Square( int i_RowIndex, eColumn i_ColIndex) 
{
    m_RowIndex = i_RowIndex;
    m_ColIndex = i_ColIndex;
    **new Square(i_RowIndex, i_ColIndex, eCoinType.NoCoin);**
}

public Square(int i_RowIndex, eColumn i_ColIndex, eCoinType i_CoinType) 
{
    m_RowIndex = i_RowIndex;
    m_ColIndex = i_ColIndex;
    m_Coin = i_CoinType;
}

在其他C'tor中調用過載的C'tor以及用粗體看到的“新”聲明是不是很好? 我認為這是錯誤的,每次我們調用new時我們都會分配一個新實例,從C'tor分配2個重復實例是不對的,這意味着從第一個位置分配一個實例。

我錯了嗎?

謝謝

您不應該在構造函數中調用重載構造函數,而是創建一個新實例。

應該更像是:

public Square( int i_RowIndex, eColumn i_ColIndex)
    : this(i_RowIndex, i_ColIndex, eCoinType.NoCoin)
{
}

public Square(int i_RowIndex, eColumn i_ColIndex, eCoinType i_CoinType) 
{
    m_RowIndex = i_RowIndex;
    m_ColIndex = i_ColIndex;
    m_Coin = i_CoinType;
}    

這是不對的。 其實這句話:

new Square(i_RowIndex, i_ColIndex, eCoinType.NoCoin);

在構造函數上絕對沒有 (有用)。

我認為你想要的是更像這樣的東西:

public Square( int i_RowIndex, eColumn i_ColIndex) 
    : this(i_RowIndex, i_ColIndex, eCoinType.NoCoin) 
{}

public Square(int i_RowIndex, eColumn i_ColIndex, eCoinType i_CoinType) 
{
    m_RowIndex = i_RowIndex;
    m_ColIndex = i_ColIndex;
    m_Coin = i_CoinType;
} 

調用new將創建另一個將被垃圾收集的實例,因為您不存儲對它的引用。 此外,原始實例中的m_Coin將不會被設置(或者更確切地說將被設置為default(eCointType)

public Square( int i_RowIndex, eColumn i_ColIndex) : this(i_RowIndex, i_ColIndex, eCoinType.NoCoin)
{

}

public Square(int i_RowIndex, eColumn i_ColIndex, eCoinType i_CoinType) 
{
            m_RowIndex = i_RowIndex;
            m_ColIndex = i_ColIndex;
            m_Coin = i_CoinType;
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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