Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Типизированный индексируемый динамический массив, (нет generic'а Array<type> 
:(
    Опции темы
CyraxZ
Дата 9.4.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Только два варианта:
1. Массив ArrayList - массив object'ов (не типизированный массив) - приходится постоянно типизировать...
2. List<type> - типизированный список с возможностью индексации, НО: нельзя изменять объекты через индексы (можно только читать)...
(list[2] := 4  - error)
PM MAIL   Вверх
Void
Дата 9.4.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Во-первых, есть просто Type[], во-вторых
Цитата(CyraxZ @  10.4.2007,  00:38 Найти цитируемый пост)
2. List<type> - типизированный список с возможностью индексации, НО: нельзя изменять объекты через индексы (можно только читать)...

Прекрасно можно. Единственно, могу предположить, что у тебя List<T> a, где T — value-тип (структура), а ты пытаешься изменить в нём поле: a[i].member = x. Вот это действительно невозможно.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
CyraxZ
Дата 10.4.2007, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Цитата

пытаешься изменить в нём поле: a[i].member = x. Вот это действительно невозможно

Очередной сюрприз Microsoft... Что у неё там за аномальные проблемы с полями ?!..
PM MAIL   Вверх
Void
Дата 10.4.2007, 16:22 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Никаких сюрпризов, надо просто понимать семантику value-типов. Оператор [] возвращает копию содержимого, в этом вся проблема. Обойти это можно, заменяя объект целиком:
Код
a[i] = new MyValueType(3, a[i].y);
// вместо
a[i].x = 3;



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
CyraxZ
Дата 10.4.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Цитата

Никаких сюрпризов, надо просто понимать семантику value-типов. Оператор [] возвращает копию содержимого, в этом вся проблема

Так нужно не копию возвращать, а по смещению поля доступ предоставлять к типизированной области памяти, как в C/С++...
А к семантике value-типов, как по мне, ситуация прямого отношения не имеет...

Добавлено через 6 минут и 2 секунды
Проблема здесь в реализации индексатора через механизм set/get...

Это сообщение отредактировал(а) CyraxZ - 10.4.2007, 23:20
PM MAIL   Вверх
ivashkanet
Дата 11.4.2007, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(CyraxZ @  10.4.2007,  22:16 Найти цитируемый пост)
Так нужно не копию возвращать, а по смещению поля доступ предоставлять к типизированной области памяти, как в C/С++...

Какое смещение, какой доступ к Value-типам?  (к структурам, то бишь)
Очень сомневаюсь, что в С/С++ эта проблема решена. "Ссылка" на объект в стеке?
PM MAIL WWW ICQ   Вверх
CyraxZ
Дата 11.4.2007, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Должно быть так:
индексатор list[i] - возвращает i-ю переменную (value-структуру) по ссылке (в C-ном понимании), т.е. ссылку на типизированную область памяти, где физически расположена i-я структура, и предоставить нам право самим решать, что мы будем делать с этой областью памяти, а не вызывать методы get или set в зависимости от операции, которую мы выполняем с элементом массива/списка - присваиваем (выполняется метод set) или получаем доступ к полю структуры (выполняется метод get, после чего мы уже не можем присвоить полю структуры другое значение, поскольку у нас имеется копия)...

PM MAIL   Вверх
mr.DUDA
Дата 11.4.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(CyraxZ @  11.4.2007,  09:16 Найти цитируемый пост)
т.е. ссылку на типизированную область памяти, где физически расположена i-я структура, и предоставить нам право самим решать, что мы будем делать с этой областью памяти

прощай, managed heap...  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.