[Ответить в тред] Ответить в тред

15/10/15 - Набор в модераторы 15.10 по 17.10
27/09/15 - Двач API — Инструкция к применению
15/09/15 - Про пожертвования и ДДоС

Официальная Телеграм конфа Двача **CLICK**


[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 5 | 1 | 2
Назад Вниз Каталог Обновить

Аноним 16/02/16 Втр 10:05:51  655724  
14556063518330.jpg (759Кб, 1024x768)
Есть класс содержащий в себе флаг(булево) и лист самого себя. И есть метод, заполняющий экземпляр данного класса через индексы листа.
class nod
{
bool f;
List<nod> list;
}
_________
nod CreateNod()
{
nod final = new nod();
final.list = new List<nod>();
nod k = new nod();
k.f = false;
for (int i = 0; i<5 ;i++)
{
final.list.Add(k);
if (некоторое условие)
{
final.list[0].f=true;
}
}

Почему при изменении булева в одном элементе листа меняются не только все булевы в этом экземпляре, но и перезаписывается другой экземпляр того же класса?>nod k = new nod();Анон, поясни за компиляцию такой рекурсии.C#,microsoft VS2015
Аноним 16/02/16 Втр 10:29:06  655739
бамп
Аноним 16/02/16 Втр 10:31:19  655744
Во-первых, есть закрепленный.
Во-вторых, твой код - говно.
В-третьих, у тебя в списке ссылка на один и тот же объект k пять раз, понятное дело что если ты поменяешь поле в одном элементе списка, то и в других оно тоже поменяется.
Аноним 16/02/16 Втр 10:36:47  655753
>>655744
получается я меняю изначально k, а потом final ссылается на него каждый раз?
Аноним 16/02/16 Втр 10:39:02  655757
>>655753
for (int i = 0; i<5 ;i++)
{
nod k = new nod();
final.list.Add(k);
...
}

Тогда в списке будет пять разных объектов, каждый со своим значением поля f.
Аноним 16/02/16 Втр 10:49:49  655780
>>655757
примерно понял. Выходит если я добавляю элемент листа, то я должен выделять на него отдельную память. Если есть еще подобные примеры, покидайте для точности моего недалекого восприятия.

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 5 | 1 | 2
Назад Вверх Каталог Обновить

Топ тредов