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

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Есть класс:
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2012, 19:06
Ответы с готовыми решениями:

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

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

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

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

9
4 / 4 / 3
Регистрация: 08.09.2012
Сообщений: 27
14.10.2012, 19:27 2
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
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
14.10.2012, 19:29  [ТС] 3
Тьфу ты... Так просто...
0
120 / 101 / 9
Регистрация: 12.06.2012
Сообщений: 322
Записей в блоге: 12
14.10.2012, 19:35 4
Можно еще проще (в плане записи):

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
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
14.10.2012, 20:09  [ТС] 5
Еще 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
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
14.10.2012, 20:21 6
У вас в counter количество элементов в массиве, а в c# по умолчанию индексация с нуля. Отсюда и ошибка.
0
.NET ONLY
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
14.10.2012, 20:28  [ТС] 7
Цитата Сообщение от 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
120 / 101 / 9
Регистрация: 12.06.2012
Сообщений: 322
Записей в блоге: 12
14.10.2012, 20:41 8
В вашем примере вы в методе clickedPanel_Click инициируете элемент массива с индексом 0 (counter = 0), в конце метода увеличиваете значение counter и в методе clickedPanel_Paint пытаетесь обратиться уже в элементу с индексом 1, а он не инициализирован и равен null, отсюда и ошибка.
0
.NET ONLY
71 / 71 / 7
Регистрация: 05.10.2011
Сообщений: 495
14.10.2012, 20:53  [ТС] 9
Цитата Сообщение от 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
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
14.10.2012, 21:11 10
зачем еще одна переменная?
можно ведь просто
C#
1
if (counter > 0)
И вообще, пользуйтесь нормальными динамическими коллекциями, List<Element> например
0
14.10.2012, 21:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2012, 21:11
Помогаю со студенческими работами здесь

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

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

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

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

String, как создать глобальный массив из экземпляров этого класса?
Добрый день. Начал недавно изучать Visual Studio. Хочу создать в класс одним из полей которого...

Как создать массив экземпляров класса для последующего обращения к его элементам по ссылке?
Всем здравствуйте. Вот код моего класса: class Param { private: int cnt; float akk;...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru