Страница: 1 |
Страница: 1 |
Вопрос: MemberWiseClone
Добавлено: 25.07.04 12:52
Автор вопроса: Logot | ICQ: 305396405
Зачем нужен метод MemberWiseClone класса Object? Как понять "создаёт поверхностную копию текущего объекта"? Когда он используется?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #1
Добавлено: 25.07.04 15:08
Посмотрите здесь:
http://www.gotdotnet.ru/Forums/CommonForum/31577.aspx
Номер ответа: 2
Автор ответа:
Logot
ICQ: 305396405
Вопросов: 9
Ответов: 28
Профиль | | #2
Добавлено: 25.07.04 21:06
Хочу больше информации!!!
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 26.07.04 06:36
Из MSDN:
A shallow copy creates a new instance of the same type as the original object, and then copies the nonstatic fields of the original object. If the field is a value type, a bit-by-bit copy of the field is performed. If the field is a reference type, the reference is copied but the referred object is not; therefore, the reference in the original object and the reference in the clone point to the same object. In contrast, a deep copy of an object duplicates everything directly or indirectly referenced by the fields in the object.
For example, if X is an Object with references to the objects A and B, and the object A also has a reference to an object M, a shallow copy of X is an object Y, which also has references to objects A and B. In contrast, a deep copy of X is an object Y with direct references to objects C and D, and an indirect reference to object N, where C is a copy of A, D is a copy of B, and N is a copy of M.
Номер ответа: 4
Автор ответа:
Logot
ICQ: 305396405
Вопросов: 9
Ответов: 28
Профиль | | #4
Добавлено: 28.07.04 00:10
А я с английским не дружу, но попробую через Prompt перевести. Всё равно спасибо.
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 28.07.04 09:34
Зря.. Надо с английским дружить..
Грубо говоря, при воздании поверхностной копии копируются только
ссылки на объекты, после чего поля старого объекта и его копии будут
ссылаться на одни и те же объекты.
А при создании глубокой копии все поля классы копируются и после
создания копии поля классов ссылаются уже на разные объекты.
Простой примерчик... Сам написал.. Вроде работает, проверял в VB 2005.
Public Class SomeObject
Public str As String
End Class
Public Class A
'Для демонстрации Shallow copying нужен ссылочный тип...
'Поэтому объявим экземпляр класса SomeObject, который
'хранит в себе строку
Public SomeObj As SomeObject
Public Overloads Function MemberwiseClone() As A
Return MyBase.MemberwiseClone
End Function
End Class
...
Dim A As New A
A.SomeObj = New SomeObject()
A.SomeObj.str = "123"
Dim B As A = A.MemberWiseClone()
'Выводим значения полей...
'Они идентичны, потому что A.SomeObj и B.SomeObj
'ссылаются на один объект
MsgBox A.SomeObj.str
MsgBox B.SomeObj.str
'Изменяем поле одного класса
B.SomeObj.str = "abc"
'Выводим значения
'Они опять идентичны!
'Потому что A.SomeObj и B.SomeObj ссылаются на один объект
'Этого не произойдет, если сделать Deep copy, например, реализовав
'в классе A интерфейс IClonable и вызывая для копирования метод Clone
MsgBox A.SomeObj.str
MsgBox B.SomeObj.str
Номер ответа: 6
Автор ответа:
Logot
ICQ: 305396405
Вопросов: 9
Ответов: 28
Профиль | | #6
Добавлено: 29.07.04 00:55
С английским я уже пытаюсь месяца четыре подружиться, но пока он ко мне нейтален.
За примерчик благодарен. Ща буду разбираться.
Номер ответа: 7
Автор ответа:
Logot
ICQ: 305396405
Вопросов: 9
Ответов: 28
Профиль | | #7
Добавлено: 29.07.04 00:57
Хотел сказать,- нейтрален.