Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2013, 09:49   #1
voidmain
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 2
Печаль Добавление своих объектов в Добавление своих объектов в двунаправленный кольцевой список

Помогите пожалуйста! Мне нужно создать список из объектов своего класса, как это сделать?

using System;
using System.Collections.Generic;

class myClass
{
public int a = 5;
public int b = 6;
public mySprite(int _a, int _b)
{
a = _a;
b = _b;
}
}

class Animal
{
static void Main()
{
List<myClass> dinos = new List<myClass>();
myClass ptr = new myClass(3,9);
Console.WriteLine("myClass.a = " + ptr.a + " myClass.b = " + ptr.b);

ptr.a = 1;
ptr.b = 2;
dinos.Add(ptr);
ptr.a = 3;
ptr.b = 4;
dinos.Add(ptr);
ptr.b = 5;
ptr.b = 6;
dinos.Add(ptr);

Console.WriteLine();
foreach (mySprite dino in dinos)
{
Console.WriteLine(dino.a);
Console.WriteLine(dino.b);
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("\nCapacity: {0}", dinos.Capacity);
}
}

Результат проги:
myClass.a = 3 myClass.b = 9

3
6

3
6

3
6

Capacity:4

1) Почему значение объектов, добавленных в список, одинаковое?
2) Почему Capacity:4 а не три!?
voidmain вне форума Ответить с цитированием
Старый 21.03.2013, 10:48   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Код оформлять по правилам надо - кнопочкой #

ошибка 1
Код:
class myClass
 {
 public int a = 5;
 public int b = 6;
 public mySprite(int _a, int _b)
почему конструктор с другим именем, нежели класс ?

ошибка 2
Код:
myClass ptr = new myClass(3,9);
 Console.WriteLine("myClass.a = " + ptr.a + " myClass.b = " + ptr.b);

 ptr.a = 1;
 ptr.b = 2;
 dinos.Add(ptr);
 ptr.a = 3;
 ptr.b = 4;
 dinos.Add(ptr);
 ptr.b = 5;
 ptr.b = 6;
 dinos.Add(ptr);
Добавляется в список ОДИН И ТОТ же объект, по своей ссылке на него, список ведь не проверяет одинаковы ли добавляемые ссылки.
Чтобы добиться Вам желаемого, надо после каждого добавления создавать новый объект (вызовом new ) ну а ссылку можно использовать ту же самую (ну или разные если хотите)

Ошибка 3
Capacity - вместимость списка (без переразмещения его в памяти). А количество реально добавленных туда элементов надо смотреть свойством Count

Совет - пользуйтесь форматированием отступов в коде, в вижуал студии ctrl+e,d
phomm вне форума Ответить с цитированием
Старый 21.03.2013, 11:01   #3
voidmain
Новичок
Джуниор
 
Регистрация: 21.03.2013
Сообщений: 2
По умолчанию

Цитата:
почему конструктор с другим именем, нежели класс ?
Очепятка
Цитата:
Добавляется в список ОДИН И ТОТ же объект, по своей ссылке на него, список ведь не проверяет одинаковы ли добавляемые ссылки.
А, то есть получается, когда я каждый раз перед добавлением элемента в список меняю a и b
Код:
ptr.a = 1;
 ptr.b = 2;
 dinos.Add(ptr);
, каждый раз следующий элемент добавляющийся в список, ссылается на мой ptr объект, а не содержит свое уникальное значение! Тогда делаю так:
Код:
dinos.Add(new myClass(1,2));
dinos.Add(new myClass(3, 4));
dinos.Add(new myClass(5, 6));
voidmain вне форума Ответить с цитированием
Старый 21.03.2013, 13:08   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Угу, кстати забыл ещё про 1 ошибку
Код:
ptr.b = 5;
 ptr.b = 6;
 dinos.Add(ptr);
За счёт того, что до этого было ptr.a = 3; результат и показывается в виде 3 6

Ещё совет. Выполнение подобного кода
Код:
Console.WriteLine(dino.a);
 Console.WriteLine(dino.b);
надо отдавать носителю свойств (классу), в данном случае подошёл бы метод
Код:
class myClass
 {
...
public override ToString()
{
    return string.Format("{0}\n{1}", a, b);
}
и вызывался бы просто Console.WriteLine(dino);
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление объектов Rymbil C# (си шарп) 0 29.09.2012 15:46
Добавление сцен или объектов из 3D MAX в Delphi XE2(FireMonkey) ST@LKER Общие вопросы Delphi 0 06.03.2012 14:44
Добавление элемента в массив объектов {с++} Alt_Shift Помощь студентам 11 22.04.2011 05:43
Добавление элемента в кольцевой список ForzaJuve Общие вопросы C/C++ 1 09.11.2010 19:39
добавление объектов в MultiPage AlexandrSid Microsoft Office Excel 4 12.02.2009 15:49