![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| ainis |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 15.2.2009 Репутация: нет Всего: нет |
Есть массив типа ArrayList (назовем его AL), содержащий множество объектов созданного мной класса. Надо в этот массив добавить еще один элемент, причем этот элемент должен быть копией какого-либо существующего элемента массива AL.
Т. е., допустим, массив AL содержит 10 элементов, я беру третий элемент, создаю его копию и добавляю в конец массива AL. При это третий элемент и добавленный элемент, по сути, представляют собой одно и то же, т. е. ссылаются на одно и то же место в памяти, насколько я понимаю. Как разорвать эту связь? Как сделать так, чтобы третий элемент массива AL (для нашего случая) и последний добавленный элемент этого массива представляли собой независимые объекты? |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 1 Всего: 36 |
ainis,
класс должен реализовывать интерфейс ICloneable |
|||
|
||||
| ainis |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 15.2.2009 Репутация: нет Всего: нет |
Спасибо! Действительно, все оказалось очень просто.
|
|||
|
||||
| ainis |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 15.2.2009 Репутация: нет Всего: нет |
Оказалось, что все не так просто.
Дело в том, что объекты массива AL тоже содержат массивы (ArrayList) объектов, которые, в свою очередь, опять же могут содержать массивы.Например: Public Class A 'массив AL содержит объекты класса AA Public AL As New ArrayList End Class Public Class AA 'массив massAA содержит объекты класса AAA Public massAA As New ArrayList End Class Public Class AAA 'здесь тоже могут быть массивы объектов End Class При использовании интерфейса ICloneable следующий код осуществляет всего лишь поверхностное копирование, т. е. по-прежнему копирует ссылки в массиве massAA объектов класса AA. Public Class A Implements ICloneable 'массив AL содержит объекты класса AA Public AL As New ArrayList Public Function Clone() As Object Implements System.ICloneable.Clone Dim newA as A newA = CType(Me.MemberwiseClone, A) newA.AL = CType(AL.Clone, ArrayList) Return newA End Function End Class В классы AA и AAA я тоже "запихал" ICloneable и написал соотв. функции Clone. Как теперь использовать эти интерфейсы в классе A для полного копирования? Простой перебор элементов массива AL и попытка клонирования по одному приводит к ошибке. |
|||
|
||||
| ainis |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 15.2.2009 Репутация: нет Всего: нет |
Вроде справился с помощью сериализации, НО... (Это чертово НО меня уже достало!
Один из массивов содержит объекты класса GraphicsPath, а этот класс несериализуем. Как тут можно выйти из ситуации? |
|||
|
||||
| ainis |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 15.2.2009 Репутация: нет Всего: нет |
Проблема решена. Заменил GraphicsPath на Rectangle.
|
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |