[英]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.