Страница: 1 | 2 | 3 |
Вопрос: VB2005 массивы
Добавлено: 08.03.07 19:50
Автор вопроса: -=Fenix=-
Ответы
Всего ответов: 37
Номер ответа: 31
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #31
Добавлено: 12.03.07 22:54
Именно это я и хотел сказать.. Некорректно выразился.. сорри..
Номер ответа: 32
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #32
Добавлено: 13.03.07 04:34
Я несколькими постами выше привел объемную цитату (не поленился набирать блин, но не оценили увы) из Фаулера, там четко и ясно написано для чего используются структуры.
Ты правда не понимаешь?
Вот код со структурами.
Structure UserInfo
Public Name As String
End Structure
Dim A As UserInfo
Dim B As UserInfo
B = A
A.Name="Artyom"
B.Name="Unknown"
При этом A - это один объект, B - другой, в каждом лежит соответствующий Name. Два разных объекта.
Пишем аналогичный код для классов
Class UserInfo
Public Name As String
End Class
Dim A As New UserInfo
Dim B As UserInfo
B = A
A.Name="Artyom"
B.Name="Unknown"
В итоге получаем:
A и B - это экземпляры одного и того же объекта.
Оба объекта имеют одно и то же значение поля Name - "Unknown"
Разницу ощущаем?
Мне не нужно чтоб две переменные ссылались на один и тот же объект. В данном конкретном случае мне нужно чтоб было 2 объекта с абсолютно разными данными.
Чтоб получить то что мне нужно, мне прийдется писать следующее:
Implements ICloneable
Public Name As String
Public Function Clone() As Object Implements System.ICloneable.Clone
Dim Result As New UserInfo
Result.Name = Me.Name
Return Result
End Function
End Class
Dim A As New UserInfo
Dim B As UserInfo
B = CType(A.Clone, UserInfo)
A.Name = "Artyom"
B.Name = "Unknown"
Думаю, дальнейшие комментарии излишни.
А MyArr(10).LastName = "WAZZZZZZZZZZZUP" религия использовать не позволяет?
Номер ответа: 33
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #33
Добавлено: 13.03.07 04:40
Прошу заметить.
Я не агитирую за использование структур.
Я агитирую за то чтоб классы использовались там где уместно использовать классы и структуры использовались там где уместно использовать структуры.
Возможно мой пример с UserInfo семантически не совсем верен, я хотел показать техническую сторону этого вопроса, а не архитектурную.
Для того чтоб хранить информацию о пользователе, нужно использовать класс.
Для того чтоб хранить дату, нужно использовать структуру.
Для того чтоб хранить поток данных, нужно использовать класс.
Для того чтоб хранить информацию о цвете, нужно использовать структуру
Номер ответа: 34
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #34
Добавлено: 13.03.07 08:18
Вовсе нет... Это утверждение верно только для структур. В случае с классами это не экземпляры одного и того же объекта.. это ссылки указывающие на один и тот же объект. (чувствуешь разницу?) Предположим у нас есть довольный объемный объект.. В случае со структурами при копировании мы получим 2 больших объекта, а с классами у нас так.. и останется 1 объект и будут 2 ссылки на него указывать.
Часто ли тебе приходилось реализовывать ICloneable? И в каких ситуациях? Не знаю... я как то не испытывал в нем необходимости..
Кхе.. кхе... как бы это помягче выразиться... религия то позволяет.. но во компилятор против.. (см. посты №8,9)
Номер ответа: 35
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #35
Добавлено: 13.03.07 08:27
Во всяком случае при хранении в List такой вариант со структурами не прокатывает.. хотя кто знает.. возможно в массиве это и будет работать..
Номер ответа: 36
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #36
Добавлено: 13.03.07 08:45
Бу га га.
Разумеется. Потому что структура, возвращённая из property, всегда есть копия оригинала. Что тоже очень удобано и правильно в тех случаях, когда нужно именно такое решение.
Номер ответа: 37
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #37
Добавлено: 13.03.07 10:32
В любом случае - не убедили.. Я прислушиваюсь и ценю мнение некоторых людей на этом форуме, и готов признать свою не правоту, если это так... но это не тот случай..
Я не говорю о том, что структура это отстой.. я говорю о том, что область ее применения ограничена очень и очень узким кругом задач. Одним из основных правил использования структур(по рекомендациям MS) является то, что стуктура должна быть неизменна на всем протяжении жизни (после создания через конструктор), что размер структуры не должен превышать 16 байт, и она не должна содержать полей ссылочного типа.. Так зачем мне такая радость нужна в повседневной жизни?