Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Передача массива из одного класса в другой


Автор: mrHunter 29.5.2008, 18:37
Есть Класс1 в нем производятся предварительные вычисления и заполняются 5 массивов с параметрами. (Массивы заполняются именно в этом классе).

Эти 5 массивов активно используются в Классе2.

Так вот вопрос, как наиболее правильно с точки зрения стиля программирования и оптимально передать эти массивы в Класс2?

Можно, конечно объявить их в классе2 как public, но это наверное не есть гуд, т.к. плохой стиль программирования.
Создать свойства тоже конечно можно, но в случае массивов я не знаю, правильно ли это?

Читал про индексаторы... Я понял как сделать 1 индексатор в классе, а как их сделать 5 шт?

Подскажите пожалуйста.

Автор: -Mikle- 29.5.2008, 19:01
Цитата(mrHunter @  29.5.2008,  21:37 Найти цитируемый пост)
Так вот вопрос, как наиболее правильно с точки зрения стиля программирования и оптимально передать эти массивы в Класс2?

Все зависит от задачи, и как массивы используются. Вообще частая ошибка, это излишнее деление кода на классы. Делить конечно надо, но разумно. Просто у меня возникло такое замечание из-за того, что массивы заполняются в одном классе, а используются в другом. Как то смущает меня немного это... Зотя может для решения твоей задачи именно так и нужно... 

Ок, по сути вопроса...
Цитата(mrHunter @  29.5.2008,  21:37 Найти цитируемый пост)
Создать свойства тоже конечно можно, но в случае массивов я не знаю, правильно ли это?

А почему нет? Нет ничего плохого в том, что свойство будет иметь тип массив строк, например. Это абсолютно нормально.
Код

string[] _params;
public string[] Params { get { return _params; } }


Если допустимо в твоей задаче (я не знаю логики взаимодействия между классами в твоей задаче), то можно в Класс2 передавать ссылку на Класс1.

Если не допустимо, то, возможно, тебе будет удобнее вынести эти пять массивов в отдельный класс и использовать его в Класс1 и в Класс2. Это даст большую гибкость в будущем расширении взаимодействия между Класс1 и Класс2.

Еще раз повотрюсь, "красивое" решение зависит от конкретной задачи в целом.

Добавлено через 2 минуты и 22 секунды
Цитата(mrHunter @  29.5.2008,  21:37 Найти цитируемый пост)
Читал про индексаторы... Я понял как сделать 1 индексатор в классе, а как их сделать 5 шт?

5-ть не сделаешь никак. Только одно разумеется.

Автор: mrHunter 29.5.2008, 20:05
Спасибо, -Mikle-!

Массивы заполняются в Классе1, т.к. это класс - форма приложения. А в Классе2 содержатся общие для всей программы поля и методы.

Насчет свойств:

И в Классе1 и в Классе2 надо создавать

Код

private static int[] array1;


В Классе2 надо создать свойство:
public static Array1
{
  set { array1 = value; }
}

В Классе1 после заполнения массива:

Код

Класс2.Array1 = array1;


Меня просто смущает, что так много кода...

Автор: -Mikle- 29.5.2008, 21:29
Цитата(mrHunter @  29.5.2008,  23:05 Найти цитируемый пост)
Массивы заполняются в Классе1, т.к. это класс - форма приложения. А в Классе2 содержатся общие для всей программы поля и методы.

ясно теперь.

Кода не много. Вот так будет нормально:

Код

static class Класс2
{
    static int[] array1;
    public static int[] Array1
    {
        get { return array1; }
        set { array1 = value; }
    }
}


а в форме писать:
Код

Класс2.Array1 = new int[99];

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)