Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Не могу разобраться с конструктором по-умолчанию (http://forum.oszone.net/showthread.php?t=237488)

Tonny_Bennet 28-06-2012 18:42 1942233

Не могу разобраться с конструктором по-умолчанию
 
Здравствуйте.

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

Код:

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 1942320

это потому что ты написал _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 1942372

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

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

ferget 29-06-2012 03:46 1942461

можно так

Код:

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


Tonny_Bennet 29-06-2012 12:00 1942616

ferget, спасибо. Т.к. ничего лучше не нашлось сделал так

Код:

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



Время: 18:56.

Время: 18:56.
© OSzone.net 2001-