Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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.MyProperty="Hello world!"
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
Строки VB.NET являются неизменными Иначе говоря, любые функции и операторы которые на первый взгляд модифицируют строки , в действительности создают и возвращают НОВЫЙ объект

Это к тому, что всегда за кулисами создается новый объект, а не меняется исходный.. То же самое верно и в отношении структур..

Структуры лучше всего подходят для работы с большим количеством мелких объектов основанных на других структурных типах и не содержащих полей, относящихся к ссылочным типам

Другими словами структуру оправдано использовать только с числовыми полями.. Наличие хотя бы одного поля строкового типа ( а как известно строка- ссылочный тип) или любого другого не структурного типа неизбежно приведет к тормозам.. (имхо) К тому же... (цитирую)
В рекомендации Майкрософт говорится, что затраты на копирование данных в структурах превышает время на сборку мусора, когда размер структуры превышает 16 байт

Отсюда можно сделать вывод , что максимально в структуре можно до 4 полей типа Int32 далее структура становится нецелесообразной(имхо)..
В остальных случаях лучше обходиться ссылочными типами (читать классами прим. EROS'a) Иначе говорря, если вы привыкли создавать и использовать пользовательские типы вместо классов, пора менять привычки


Все цитаты из книги Д.Эпплемана "Переход на 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
Если ты читал предудыщие посты, то ты должен был видеть что при попытке получить ссылку на на структуру в строке Dim myMan As Man = Tests(0) - получили его копию..

Каким образом это утверждение связано с утверждением, что структура создаётся заново при изменении - а ты ведь именно это утверждал?
Структура не создаётся заново при изменении. Копируется при присваивании, разумеется. Что очень хорошо. Но не создаётся при изменении.

Ответить

Номер ответа: 30
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #30 Добавлено: 12.03.07 22:51
странно что ты считаешь это недостатком структур.

Хм.. Ну растолкуй тогда в чем преимущество структуры? И чем копирование структуры со всеми ее полями быстрее копирования просто ссылки? Даже если взять банальный пример: В массиве имеем 100 структур, и нам необходими изменить в них какое то поле.. Что в итоге получится? Вместо того, чтобы тупо изменить исходный объект, у нас будет 100 раз создаваться копия этой структуры, затем мы ее изменяем и снова загоняем в массив.. И где тут быстродействие и преимущества?

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам