PDA

Показать полную графическую версию : Не могу разобраться с конструктором по-умолчанию


Tonny_Bennet
28-06-2012, 18:42
Здравствуйте.

Есть класс у которого есть конструктор по-умолчанию:


public class Rel
{
public enum state
{
_0,
_1,
}


private state _state;


public state State
{
get { return _state; }
set { _state = value; }
}

public Rel()
{
_state = state._0;
}
}


Есть другой класс, полем которого является массив элементов первого класса, и у него тоже есть конструктор по-умолчанию:


public class Module
{

private Rel[] _rel;

public Rel[] rel
{
get { return _rel; }
set { _rel = value; }
}

public Module()
{
_rel = new Rel[5];
}


Потом я отдельно создаю элемент первого класса и элемент второго.

Rel rl = new Rel()

Module mod = new Module();

Первый элемент rl как положено создаётся и у него есть единственное поле State равное "_0". Второй элемент также создаётся с одним полем массивом. Но каждый элемент этого массива равен null. А хотелось изначально, что б был массив из 5 элементов первого класса с полем State равным "_0"

Подскажите пожалуйста почему так происходит и как это исправить.

Beyound
28-06-2012, 21:31
это потому что ты написал _rel = new Rel[5]; что в переводе на русский значит - "дай этой переменной место в памяти размером в 5 элементов типа Rel". тебе нужно дописать чему эти элементы равны скажем сделав так _rel = new Rel[5]{new Rel(), new Rel(), new Rel(), new Rel(), new Rel()}; это и вызовет конструкторы

Tonny_Bennet
28-06-2012, 23:17
В принципе понятно и мысли подобные были. А чуть более элегантный код решения этой проблемы существует? Просто я представил только часть класса... и там есть место с 18 элементами :(

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

ferget
29-06-2012, 03:46
можно так

public Module()
{
_rel = new Rel[5];

for( int i=0; i<5; ++i)
{
_rel[i]=new Rel();
}
}

Tonny_Bennet
29-06-2012, 12:00
ferget, спасибо. Т.к. ничего лучше не нашлось сделал так


_rel = new Rel[5];
for (int i = 0; i <= _rel.Length - 1; i++)
{
_rel[i] = new Rel();
}




© OSzone.net 2001-2012