вопрос по конструкторам в C # - PullRequest
2 голосов
/ 25 марта 2011

Привет
Об этом частичном коде в классе с именем 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, мы выделяем новый экземпляр, и неправильно выделять 2 повторяющихся экземпляра из C'tor, что означало выделение одного экземпляра с первого места.

Яне так?

Спасибо

Ответы [ 4 ]

9 голосов
/ 25 марта 2011

Вы не должны вызывать конструктор перегрузки из конструктора, который бы создал новый экземпляр.

Должно быть больше похоже на:

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;
}    
3 голосов
/ 25 марта 2011

Это не правильно.На самом деле, это предложение:

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

Не делает абсолютно ничего (полезным) в вашем конструкторе.

0 голосов
/ 25 марта 2011
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;
} 
0 голосов
/ 25 марта 2011

Я думаю, что вы пытаетесь сделать что-то вроде этого:

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...