Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Присвоить один экземпляр класса другому / 10 сообщений из 10, страница 1 из 1
21.10.2010, 16:42
    #36912794
powerbot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
Народ, что-то я туплю

вопрос:

Есть класс Class1, в котором куча properties (prop1, prop2,.... propN), среди которых есть и объекты и коллекции

Есть некое начальное состояние properties.

Я создаю 2 экземпляра класса:

Код: plaintext
1.
Set ObjInit = New Class1
Set ObjProc = New Class1

Далее заполняю properties объекта ObjInit.



По сути объект ObjInit - это начальное состояние объекта ObjProc.
Далее я работаю в циклах с "рабочим" экземпляром ObjProc.
Т.е. объект ObjProc должен в начале каждой итерации быть эквивалентным ObjInit.

Т.е. что-то типа

Код: plaintext
1.
2.
3.
4.
5.
for count= 1  to  100 
    Set ObjProc = ObjInit
'далее я работаю с экземпляром ObjProc - изменяю его


next count


но в таком случае я просто ссылаюсь на ObjInit и в итоге изменяются оба объекта.
Как можно хранить отдельный экземпляр класса (начальное состояние объекта) - и в начале каждой итерации "инициализировать" экземпляр ObjProc?

Сории, если путанно сформулировал...
...
Рейтинг: 0 / 0
21.10.2010, 16:45
    #36912803
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
только заполнив все соответствующие properties , простым присвоением вы тут ничего не сделаете. пишите метод Init в своём классе (где все начальные значения присваиваете) и в событие Initialize его вызывайте
...
Рейтинг: 0 / 0
21.10.2010, 17:31
    #36912949
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
powerbot,

Просто вы неверно сформулировали. Вам надо не присвоить, а создать еще один экземпляр как копию первого. Обычно, если есть такая необходимость, это делается как метод самого класса.
Код: plaintext
Set MyClassNew=MyClass.GetCopy
...
Рейтинг: 0 / 0
21.10.2010, 18:16
    #36913057
powerbot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
Konst_One, Shocker.Pro

Да, я это понимаю.

Но это опять же заполнение всех пропертис до начального состояния.
А у меня в Class1 свойствами являются и объекты и классы и коллекции.

И тогда я довольно прилично теряю в быстродействии - т.е. во главе угла в моей задаче - быстродействие.

Т.е. нельзя как нибудь сделать а-ля CopyMemory чтобы один экземпляр Class1 стал идентичным другому экземпляру???

Если нет, то это жесть конечно...
...
Рейтинг: 0 / 0
21.10.2010, 18:24
    #36913073
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
powerbotДа, я это понимаю.

Если бы вы сочли нужным быть зарегистрированным пользователем, по количеству постов и вашим темам можно было бы понять вашу квалификацию и не давать дурацких советов. :)

сорри, на ваш вопрос ответ лично я не знаю
...
Рейтинг: 0 / 0
21.10.2010, 18:46
    #36913121
powerbot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
Shocker.Pro,

прошу прощения если был не точен в формулировках.

Попытаюсь еще раз максимально четко и упрощенно:

Можно ли в VB6 получить СКОПИРОВАТЬ объект (экземпляр класса) в другой объект?



Т.е. не новый "пустой" экземпляр класса:

Код: plaintext
Set Obj1 = New Class1

и не ссылку на другой экземпляр:

Код: plaintext
Set Obj1 = Obj2


а именно КОПИЮ.
...
Рейтинг: 0 / 0
21.10.2010, 23:59
    #36913534
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
Нельзя. Но можно максимально упростить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function CopyObject(src as Class1) as Class1
Dim dst as New Class1
Dim props()
dim x as Integer
    props = Array("prop1", "prop2", ... "propN")
    For x =  0  To UBound(props)
        Call CallByName(dst, props(x), vbLet, CallByName(src, props(x), vbGet))
    Next
    Set CopyObject = dst 
End Function
...
Рейтинг: 0 / 0
22.10.2010, 00:07
    #36913540
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
А, там еще и объекты… Тогда просто нельзя.

А вообще объекты не берутся сами собой из воздуха, поэтому нужно тупо написать процедуру, которая создает новый объект шаг за шагом из параметров по умолчанию. По скорости это будет самый выигрышный вариант.
...
Рейтинг: 0 / 0
22.10.2010, 00:28
    #36913552
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
Хотя есть еще вариант: хранить все значения пропертей не в локальных переменных, а локальном рекордсете, у которого есть метод Clone. Или в XML-объекте. В общем, каком-то хранилище, которое умеет само себя быстро копировать.

Кстати обнаружил, что в рекордсете с полями Key и Value, отсортированном по Key, поиск значения по ключу происходит быстрее, чем в классической коллекции. Полезно для статических наборов данных.
...
Рейтинг: 0 / 0
22.10.2010, 11:32
    #36914062
powerbot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоить один экземпляр класса другому
Antonariy,

Спасибо за столь развернутый ответ!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Присвоить один экземпляр класса другому / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]