Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
windzor2008
0 / 0 / 0
Регистрация: 07.02.2010
Сообщений: 16
#1

Массив эллементов пользовательского класса - C#

02.03.2010, 18:57. Просмотров 1339. Ответов 10
Метки нет (Все метки)

Всем привет! Пытаюсь использовать в программе массив эллементов моего класса. При выполнении функции
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private vertebra[] Spine = new vertebra[24];
private void Form1_Load(object sender, EventArgs e)
{
Point[] Apoint = a_point();
Point[] Hpoint = h_point();
for (int i = 0; i < 3; i++)
{
vertebra vert = new vertebra(Apoint, Hpoint);
Spine[i] = null;
Spine[i]=vert;
vert = null;
Apoint = update_p(Apoint);
Hpoint = update_p(Hpoint);
}
}
все эллементы имеют абсолютно одинаковые значения (последнено эллемента) В чём может быть проблема! Всем заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2010, 18:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Массив эллементов пользовательского класса (C#):

Сериализация пользовательского класса Font.
Народ, подскажите, как сериализовать этот класс? Может какой интерфейс надо...

Массив класса
Доброго времени суток. Есть вопрос как создать двумерный массив класса. ...

массив структур в массиве класса
Доброго времени суток. Помогите мне пожалуйста. У меня есть Класс setka ...

Запретить менять массив, являющийся полем класса
Из класса через свойство возвращается массив элементов. Как отследить (или...

Нужно сделать массив не строк, а объектов класса Student
теперь минусы ) 1. Никаких goto, никогда 2. Я просил сделать массив не строк,...

Создание пользовательского исключения
Подскажите, пожалуйста, как создать пользовательское исключение. Я написала...

10
outoftime
║XLR8║
756 / 656 / 211
Регистрация: 25.07.2009
Сообщений: 3,289
Записей в блоге: 5
02.03.2010, 20:53 #2
windzor2008, попробуй в цикл добавить:
C#
1
2
3
4
for (int i = 0; i < 3; i++)
{
Spine[i] = new vertebra();
//дальше все так же
0
windzor2008
0 / 0 / 0
Регистрация: 07.02.2010
Сообщений: 16
02.03.2010, 20:59  [ТС] #3
Такой вариант уже пробывал, не помогло.
0
Mikant
1280 / 952 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
02.03.2010, 20:59 #4
C#
1
vert = null;
- вот это явно лишнее. зануляет все сплайны (или что там у тя)
0
windzor2008
0 / 0 / 0
Регистрация: 07.02.2010
Сообщений: 16
02.03.2010, 21:44  [ТС] #5
Без vert = null тоже пробывал, не помогло
0
serg42
114 / 96 / 7
Регистрация: 14.02.2010
Сообщений: 263
02.03.2010, 22:08 #6
Выложите код update_p().
0
windzor2008
0 / 0 / 0
Регистрация: 07.02.2010
Сообщений: 16
03.03.2010, 21:27  [ТС] #7
C#
1
2
3
4
5
6
private Point[] update_p(private Point [] aPoint)
{
            for (int i = 0; i < aPoint.Length; i++)
                aPoint[i].Y = aPoint[i].Y + 100;
            return aPoint;
}
0
Mikant
1280 / 952 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
04.03.2010, 10:50 #8
ну значт косяк может быть только тут
C#
1
vertebra vert = new vertebra(Apoint, Hpoint);
вероятно в конструкторе только и делается, что запоминаются ссылки на эти массивы и все: все создается одинаковым

Добавлено через 1 минуту
точнее, не создается, а становится при дальнейших манипуляциях с Apoint и Hpoint
0
m0nax
1200 / 905 / 109
Регистрация: 12.01.2010
Сообщений: 1,891
Завершенные тесты: 3
04.03.2010, 10:57 #9
любой массив это ссылочный тип, передается везде по ссылке
т.е во всех Spine[i] используется один и тот же объект, если его изменили в update_p он меняется во всех Spine[i]

короче выход - создавать новые объекты этих точек в конструкторе vertebra и уже им присваивать значения

опоздал немного с ответом )
0
windzor2008
0 / 0 / 0
Регистрация: 07.02.2010
Сообщений: 16
04.03.2010, 11:30  [ТС] #10
Т.е. если я правильно понял конструктор должен быть таким:
C#
1
2
3
4
5
6
7
public vertebra(Point[] apoint, Point[] hpoint)
{
       Apoint = new Point[apoint.Length];
       Apoint = apoint;
       Hpoint = new Point[apoint.Length];
       Hpoint = hpoint;
}
0
serg42
114 / 96 / 7
Регистрация: 14.02.2010
Сообщений: 263
04.03.2010, 12:18 #11
Можно так (не проверял):
C#
1
2
3
4
5
6
7
8
private Point[] update_p(private Point [] aPoint)
{
    for (int i = 0; i < aPoint.Length; i++)
        aPoint[i].Y = aPoint[i].Y + 100;
    Point[] ap = new Point[aPoint.Length];
    ap.Copy(aPoint, ap, ap.Length);
    return ap;
}
0
04.03.2010, 12:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2010, 12:18
Привет! Вот еще темы с решениями:

Метод с параметром пользовательского типа
Нужно написать класс для конвертора длин. Столкнулся с проблемой реализации...

Склеивание .dll и пользовательского .exe
Доброго времени суток, уважаемые форумчане ! Вложений всего пять, поэтому...

Вопрос о подключении библиотеки с реализацией пользовательского элемента управления
При подключении (через Reference) библиотеки, элемент не отображается на...

Добавление символа " в строку пользовательского формата даты
Пытаюсь вот таким вот образом обрамлять двойными ковычками день в строке...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru