Страница: 1 | 2 | 3 |
Вопрос: VB2005 массивы
Добавлено: 08.03.07 19:50
Автор вопроса: -=Fenix=-
Ответы
Всего ответов: 37
Номер ответа: 16
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #16
Добавлено: 10.03.07 21:23
У меня есть массив который хранит информацию разных категорий, и такой он не один. А если использовать просто переменные то половина кода только обьявления они займут. Ладно. Спасибо за помощь! Всёже начну писать ф-ию по удалению из массива со сдвигом индекса для такого типа как я сейчас сделал.
Номер ответа: 17
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #17
Добавлено: 10.03.07 21:26
(имхо).. зря.. Если количество элементов в массиве не очень большое, то лучше юзать класс+коллекция..
Номер ответа: 18
Автор ответа:
-=Fenix=-
Вопросов: 33
Ответов: 81
Профиль | | #18
Добавлено: 10.03.07 22:03
Массив представляющий коллекцию - динамический + в нём проперти тоже предствлют динамические массивы, так что для обработки думаю остановиться на первом варианте
Номер ответа: 19
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #19
Добавлено: 11.03.07 00:32
Так коллекция тоже динамическая.. кто тебе мешает в нее добавлять/удалять? Да и любые свойства также вполне могут быть теми же коллекциями а не массивами.. это ничему не противоречит.. Ты посмотри на классы frameworka.. всюду коллекции используются..
Разумеется, я ничего против массивов не имею.. но лично я предпочитаю использовать коллеции.. За мою практику лишь раз был вынужден прибегнуть к массиву и то только потому, что делал через GDI+ попиксельный вывод изображения (наверняка видел такой хаотичный эффект).. Так вот там при таком количестве объектов(координаты+цвет пикселя) коллекции заметно подтормаживали...
Номер ответа: 20
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #20
Добавлено: 11.03.07 00:46
Спорное предложение.У структуры и класса разные предназначения и в конкретном случае нужно использовать конкретный вариант.
Номер ответа: 21
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #21
Добавлено: 11.03.07 02:57
Ничего спорного... однозначный совет Д.Эпплемана.
Структуру,так же как и строку, нельзя изменить. Всегда за кулисами создается новый объект с новыми свойствами.. и что вообще непонятно так это то, почему способ ее хранения в памяти отличается от способов хранения других объектов? Структура ничего кроме тормозов не приносит(имхо).. Откровенно говоря я вообше не вижу практической ценности структуры как таковой.. все её возможности с лихвой перекрывает класс..
Номер ответа: 22
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #22
Добавлено: 11.03.07 07:50
К мнению, которое я указал выше, я пришел после объяснения г-на Фаулера про такое понятие как объект-значение.
То есть?
Я вполне могу изменить:
MyStructure.Count=12345
не всегда
это так и есть
Проведем бенчмарк? ))
Номер ответа: 23
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #23
Добавлено: 11.03.07 08:12
Ключевым отличием объекта-значения от ссылочного объекта является принцип проверки на равенство. Равенство ссылочных объектов определяется на основе равенства их идентификаторов, например встроеных идентификаторов объектно-орриентированых языков программирования или неких уникальных номеров, идентифицирующих объекты (такие как первичные ключи реляционной базы данных). В свою очередь, равенство объектов-значений определяется на основе равенства значений полей соответствующего класса (в рамках .NET не совсем корректно здесь употреблять слово "класса", но текст Фаулера не относится конкретно к .NET, очевидно поэтому он использовал этот термин - прим. Brand'а). Таким образом, два объекта дат считаются равными, если равны их значения дня, месяца и года.
Указанное различие отражается и в способе обработки объектов. Поскольку объекты-значения небольшие и легко создаются (... кроме тормозов ничего не приносят ... - прим. EROS'а ), их можно передавать в виде значения, а не в виде ссылки на объект. В действительности, никого не волнует, сколько объектов, соответствующих 18 марта 2001 года, находится в системе в данный момент. Никого не волнует и то, ссылаются ли эти объекты на один и тот же физический объект даты, или же представляют собой различные экземпляры объекта с одинаковыми значениями полей.
.....
Особенности .NET-реализации
Платформа .NET содержит все необходимые средства для обработки объектов-значений. В языке C#, чтобы пометить объект как объект-значение, достаточно указать в его объявлении ключевое слово struct, а не class (В VB .NET - соответственно Structure вместо Class - прим. Brand'а). После этого обработка указанного объекта будет проводиться исходя из семантики значения.
Назначение
Типовое решение объект-значение следует применять для моделирования тех сощностей, равенство которых определяется по значениям полей, а не по идентификаторам объектов. Это особенно хорошо подходит для небольших, легких в создании объектов наподобие денежныъ значений или диапазонов дат.
М. Файлер. Архитектура корпоративных прогарммных приложений. Страница 501
Следует понимать, что это книга не о .NET поэтому информация носит несколько обобщенный характер, но в большой мере рассматривается применение этой информции в рамках .NET и Java.
http://www.ozon.ru/context/detail/id/1616782/
Однозначный Must Have
Номер ответа: 24
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #24
Добавлено: 11.03.07 21:20
Это к тому, что всегда за кулисами создается новый объект, а не меняется исходный.. То же самое верно и в отношении структур..
Другими словами структуру оправдано использовать только с числовыми полями.. Наличие хотя бы одного поля строкового типа ( а как известно строка- ссылочный тип) или любого другого не структурного типа неизбежно приведет к тормозам.. (имхо) К тому же... (цитирую)
Отсюда можно сделать вывод , что максимально в структуре можно до 4 полей типа Int32 далее структура становится нецелесообразной(имхо)..
Все цитаты из книги Д.Эпплемана "Переход на VB.NET: стратегии, концепции, код"
Номер ответа: 25
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #25
Добавлено: 12.03.07 03:49
Хорошо что каждый комментарий пометил словом "имхо"
Что касается нецелесообразности и тормозов - проведем бенчмарк?
Номер ответа: 26
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #26
Добавлено: 12.03.07 08:28
С какой же радости? :roll:
Номер ответа: 27
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #27
Добавлено: 12.03.07 16:29
Если ты читал предудыщие посты, то ты должен был видеть что при попытке получить ссылку на на структуру в строке Dim myMan As Man = Tests(0) - получили его копию.. И при изменении у него свойства исходный объект остался без каких либо изменений, изменилась только копия..
Номер ответа: 28
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #28
Добавлено: 12.03.07 18:34
Ну вобщем-то этого и стоило ожидать, странно что ты считаешь это недостатком структур.
Можешь оценить какие затраты будут при создании копии экземпляра класса - начиная от реализации интерфейса ICloneable.
Номер ответа: 29
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #29
Добавлено: 12.03.07 21:03
Каким образом это утверждение связано с утверждением, что структура создаётся заново при изменении - а ты ведь именно это утверждал?
Структура не создаётся заново при изменении. Копируется при присваивании, разумеется. Что очень хорошо. Но не создаётся при изменении.
Номер ответа: 30
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #30
Добавлено: 12.03.07 22:51
Хм.. Ну растолкуй тогда в чем преимущество структуры? И чем копирование структуры со всеми ее полями быстрее копирования просто ссылки? Даже если взять банальный пример: В массиве имеем 100 структур, и нам необходими изменить в них какое то поле.. Что в итоге получится? Вместо того, чтобы тупо изменить исходный объект, у нас будет 100 раз создаваться копия этой структуры, затем мы ее изменяем и снова загоняем в массив.. И где тут быстродействие и преимущества?