Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/165: Рейтинг темы: голосов - 165, средняя оценка - 4.67
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
.NET 4.x

Как создать массив экземпляров класса

14.10.2012, 19:06. Показов 33728. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть класс:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Figure
    {
        private int x;
        private int y;
        private string inf;
 
        public int X
        {
            set { x = value; }
            get { return x; }
        }
        public int Y
        {
            set { y = value; }
            get { return y; }
        }
 
        public string INF
        {
            set { inf = value; }
            get { return inf; }
        }
    }
Мне нужно много экземпляров этого класса. Как их создать?

Я подумал сделать так, но ошибка:
C#
1
2
3
4
Figure [] mas = new Figure [5];
mas[0].X = 11;
mas[0].Y = 12;
mas[0].INF = "pos1";
Подскажите как правильно.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.10.2012, 19:06
Ответы с готовыми решениями:

Создать массив экземпляров класса
Добрый день всем еще раз. Есть такой код DepartmentClass departments; DepartmentClass TmpClass = new...

Создать массив экземпляров классов, наследующих общий интерфейс
Добрый день. Хотел создать массив классов, которые наследуют один интерфейс, но не пойму как передать тип необходимой реализации данного...

Как хранить несколько экземпляров класса с их свойствами?
Есть у нас класс - овощи объект - овощ: картошка, огурец, морковь у них есть свойства - цвет, вес, ширина, высота, они хранятся тоже в...

9
4 / 4 / 3
Регистрация: 08.09.2012
Сообщений: 27
14.10.2012, 19:27
C#
1
2
3
4
5
 Figure[] mas = new Figure[5];
            mas[0] = new Figure();
            mas[0].X =11;
            mas[0].Y = 12;
            mas[0].INF = "pos1";
1
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
14.10.2012, 19:29  [ТС]
Тьфу ты... Так просто...
0
 Аватар для xZooYx
120 / 101 / 9
Регистрация: 12.06.2012
Сообщений: 322
Записей в блоге: 12
14.10.2012, 19:35
Можно еще проще (в плане записи):

C#
1
2
3
4
5
6
var mas = new[]
{
    new Figure { X = 11, Y = 12, INF = "pos1" },
    new Figure { X = 11, Y = 12, INF = "pos1" },
    new Figure { X = 11, Y = 12, INF = "pos1" }
};
Будет создан массив типа Figure, состоящий из 3 элементов.
1
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
14.10.2012, 20:09  [ТС]
Еще 1 проблема.
Вот весь код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
namespace ConvexHull
{
    public partial class GeneralForm : Form
    {
        public Element[] masEl = new Element[100];
        public int counter = 0;
        public GeneralForm()
        {
            InitializeComponent();
        }
 
        private void clickedPanel_Click(object sender, EventArgs e)
        {
            if (e is MouseEventArgs)
            {
                masEl[counter] = new Element();
                masEl[counter].posX = ((MouseEventArgs)e).X;
                masEl[counter].posY = ((MouseEventArgs)e).Y;
                masEl[counter].infEl = "Element # " + counter;
 
                this.Invalidate();
 
                counter++;
            }
        }
 
        private void clickedPanel_Paint(object sender, PaintEventArgs e)
        {
            Bitmap bmp = new Bitmap(1, 1);
            bmp.SetPixel(0, 0, Color.Black);
            e.Graphics.DrawImage(bmp, masEl[counter].posX, masEl[counter].posY);
        }
    }
}
Я создаю экземпляр класса в методе "clickedPanel_Click".

Теперь когда я пытаюсь получить доступ полю в другом методе "clickedPanel_Paint" - вылетает ошибка.

Не работает вот эта строчка:
C#
1
e.Graphics.DrawImage(bmp, masEl[counter].posX, masEl[counter].posY);
Ошибка:


Как исправить?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
14.10.2012, 20:21
У вас в counter количество элементов в массиве, а в c# по умолчанию индексация с нуля. Отсюда и ошибка.
0
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
14.10.2012, 20:28  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
У вас в counter количество элементов в массиве, а в c# по умолчанию индексация с нуля. Отсюда и ошибка.
Количество элементов тут:
C#
1
public Element[] masEl = new Element[100];
а counter у меня индекс массива:
C#
1
public int counter = 0, temp;
Если написать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void clickedPanel_Click(object sender, EventArgs e)
        {
            if (e is MouseEventArgs)
            {
                temp = counter;
                masEl[counter] = new Element();
                masEl[counter].posX = ((MouseEventArgs)e).X;
                masEl[counter].posY = ((MouseEventArgs)e).Y;
                masEl[counter].infEl = "Element # " + counter;
 
                MessageBox.Show(Convert.ToString(masEl[counter].posX));
 
                this.Invalidate();
 
                counter++;
            }
        }
то:
C#
1
MessageBox.Show(Convert.ToString(masEl[counter].posX));
работает! Поскольку он в:
private void clickedPanel_Click

а в другом методе не пашет, даже тот самый:
C#
1
MessageBox.Show(Convert.ToString(masEl[counter].posX));
я думаю тут в этом проблема... Хотя может и нет, если что то скажите конкретно что исправить.
0
 Аватар для xZooYx
120 / 101 / 9
Регистрация: 12.06.2012
Сообщений: 322
Записей в блоге: 12
14.10.2012, 20:41
В вашем примере вы в методе clickedPanel_Click инициируете элемент массива с индексом 0 (counter = 0), в конце метода увеличиваете значение counter и в методе clickedPanel_Paint пытаетесь обратиться уже в элементу с индексом 1, а он не инициализирован и равен null, отсюда и ошибка.
0
.NET ONLY
 Аватар для DEA7H
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
14.10.2012, 20:53  [ТС]
Цитата Сообщение от xZooYx Посмотреть сообщение
он не инициализирован и равен null, отсюда и ошибка.
Давайте сделаем так:
C#
1
e.Graphics.DrawImage(bmp, masEl[0].posX, masEl[0].posY);
Та-же ошибка!

Добавлено через 7 минут
Все понял! Спасибо. Исправил.
Сделал немножко по тупому но работает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
namespace ConvexHull
{
    public partial class GeneralForm : Form
    {
        public Element[] masEl = new Element[100];
        public int counter = 0, temp = 0;
        public GeneralForm()
        {
            InitializeComponent();
        }
 
        private void clickedPanel_Click(object sender, EventArgs e)
        {
            if (e is MouseEventArgs)
            {
                masEl[counter] = new Element();
                masEl[counter].posX = ((MouseEventArgs)e).X;
                masEl[counter].posY = ((MouseEventArgs)e).Y;
                masEl[counter].infEl = "Element # " + counter;
                
                clickedPanel.Invalidate();
 
                counter++;
            
                temp = 1;
            }
        }
 
        private void clickedPanel_Paint(object sender, PaintEventArgs e)
        {
            if (temp == 1)
            {
                Bitmap bmp = new Bitmap(1, 1);
                bmp.SetPixel(0, 0, Color.Black);
                e.Graphics.DrawImage(bmp, masEl[counter-1].posX, masEl[counter-1].posY);
            }
        }
    }
}
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
14.10.2012, 21:11
зачем еще одна переменная?
можно ведь просто
C#
1
if (counter > 0)
И вообще, пользуйтесь нормальными динамическими коллекциями, List<Element> например
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2012, 21:11
Помогаю со студенческими работами здесь

Как организовать сериализацию экземпляров класса, содержащего список?
Есть класс LengthOnPicture, который хранит расстояние и текст: public class LengthOnPicture { private double...

Создать массив 4 экземпляров структуры Товар и вывести на консоль информацию о всех полях
Создать массив 4 экземпляров структуры Товар и вывести на консоль информацию о все поля. Вычислить общую цену всех товаров. Есть люди...

Как создать экземпляры класса используя массив?
Нужно создать объекты класса с помощью массива. И еще вопрос, как сделать сравнение введенного пользователем ответа, если мы выводим...

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

Как создать массив экземпляров класса, не проинициализировав его сразу?
Чтобы было что-то вроде такого: class Controller { public: User users;//ошибка, пустой, без размера сделать не получается ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru