Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: MemberWiseClone Добавлено: 25.07.04 12:52  

Автор вопроса:  Logot | ICQ: 305396405 
Зачем нужен метод MemberWiseClone класса Object? Как понять "создаёт поверхностную копию текущего объекта"? Когда он используется?

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #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-сайт: www.vbnet.ru
 Профиль | | #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
Хотел сказать,- нейтрален.

Ответить

Страница: 1 |

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



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