powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Присвоить один экземпляр класса другому
10 сообщений из 10, страница 1 из 1
Присвоить один экземпляр класса другому
    #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
Присвоить один экземпляр класса другому
    #36912803
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только заполнив все соответствующие properties , простым присвоением вы тут ничего не сделаете. пишите метод Init в своём классе (где все начальные значения присваиваете) и в событие Initialize его вызывайте
...
Рейтинг: 0 / 0
Присвоить один экземпляр класса другому
    #36912949
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
powerbot,

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

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

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

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

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

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

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

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

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

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

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



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

Код: plaintext
Set Obj1 = New Class1

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

Код: plaintext
Set Obj1 = Obj2


а именно КОПИЮ.
...
Рейтинг: 0 / 0
Присвоить один экземпляр класса другому
    #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
Присвоить один экземпляр класса другому
    #36913540
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, там еще и объекты… Тогда просто нельзя.

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

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

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


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