Передача объектов как копий

spair2k
Дата: 04.10.2005 11:16:03
На практическом опыте выявилось, что в случае

function MyFunc(objClass2 as MyClass)
dim objClass1 as new MyClass
set objClass1=objClass2 '

происходит передача ссылки на объект класса, даже если напишу

function MyFunc(ByVal objClass2 as MyClass) все равно передается ссылка

ВОПРОС: А можно копию? Очень надо...
4321
Дата: 04.10.2005 14:28:48
гы-гы-гы
часто хочецца клонировать объект (да еще с объектными св-ми и т.п.), т.чтобы все св-ва такоже отклонировались.
такие штукки уроде-ба называюцца маршаллингом. хто-то тут даже проводил ликбез, когда означенный проистекает. аднако как самому получить точную копию в VBA (т.е. как заставить обьект клонироваться) не перебирая (рекурсивно вглупьпь) все сылочные свойства, создавая такоже их клоны - осталось покрыто мраком.
глупыйглупый
Дата: 04.10.2005 14:42:55
как это мраком?
в объектном мире все в руках... осталось разобраться чьих.

делаиш CloneMe на классе, добавляя по месту необходимых методов
инициализации. и со своими объектами вопрос решен.
От большого ума можно интерфейс для себя любимого завесть IClonable типа
для вящего удобства и красоты использующего кода.

С чужими - зависит от того, захотел ли автор чужого предусмотреть подходящий к случаю инструментарий.

так я думаю.
4321
Дата: 04.10.2005 14:57:09
глупыйглупый
как это мраком?
в объектном мире все в руках... осталось разобраться чьих.

делаиш CloneMe на классе, добавляя по месту необходимых методов
инициализации. и со своими объектами вопрос решен.
От большого ума можно интерфейс для себя любимого завесть IClonable типа
для вящего удобства и красоты использующего кода.

С чужими - зависит от того, захотел ли автор чужого предусмотреть подходящий к случаю инструментарий.

так я думаю.

это понятно, Но! - На уровне отображений (прямого копирования содержимого) памяти и последующего сдвига адресов для всех ссылок задача _кажецца_ (на поверхностный взгляд - ибо предполагается возможность вычислить, чё в памятие сь ссылка, а чё - нет - т.к. все описатели структуры жеж хде-то есь) решаемой (у принципе) без каких либо левых интерфейсов. Т.е. _кажецца_ допустимым существование в объектном языке именно инструкции (а не метода) (маршаллизации) типа CLONE MyObject = ... по аналогии с LET MyType = ..., описанной "ваабще", без отношения к некоему объекту....

(понятно, что кто-то захочет "клонировать не все", а только часть объектных св-в, остальные ссылки оставив смотреть на св-ва исходника - ну дык вот к этому пусть пишет свои интерфейсы)
глупыйглупый
Дата: 04.10.2005 17:09:49
очень-очень не хочется ввязываться в длинное и для меня слабопредметное по незнанию оного....

Однако обращаю Ваше внимание на Вами же сказанные ключевые слова:
автор
На уровне отображений (прямого копирования содержимого) памяти и последующего сдвига адресов для всех ссылок

Предположим, что в COM физически существует универсальный способ решения вопроса. (Насколько я понимаю – это не так (или пусть меня поправят)…)
Пусть есть Объект-коллекция (обычный, допустим, вб-шный Collection), содержащий в себе ссылки на другие объекты.

Есть ли универсальный ответ на вопрос - что должно называться "клоном" такой коллекции
1) это новый объект-контейнер, содержащий в себе ссылки на физически те же объекты, что и первоначальная коллекция?
2) Это новый объект – контейнер, содержащий в себе ссылки на новые содержащиеся в нем объекты, каждый из которых является клоном первоначального.
Неужели действительно лучше, чтобы подобный вопрос был решен за разработчика единственным способом?
…..
ЗЫ
Замечание о другом
Структуры, например (Type), в VB – простые типы. Не ссылочные. И размер ограничен 64 кб. Чего бы уж не копировать. Между тем ByVal структуру передать нельзя.
К чему бы?
Кроме экономии стековой памяти - ничего разумного я не могу сообразить

с Уважением.
4321
Дата: 04.10.2005 17:33:06
1. по поводу различных возможностей понимания самих способов "клонирования" согласен (даже и упоминал выше), но есть в некоем смысле "выделенный случай" (когда _все_ ссылочные типы (внутрь структуры, по реурсии) полнокровно клонируются). О чем тоже сказано выше. Именно для этого случая вроде неплохо бы иметь инструкцию маршаллинга типа CLONE. (не отягощая объекты ненужными интерфейсами тем не менее передавать их копии куда-нито для альтернативных вычислений

А именно - в т.ч. - параллельных/конкурентных вычислений, что может иметь применение в системах с массовым параллелизмом, для которых пока приходится строить вместо объектов типы, клонируемые либо Let-ами либо LSet-ами что не всегда столь же удобно, как объекты.


2. Просто как то смотрел задачу, моделирующую такой распараллеливаемый ("в принципе", но не "в реализациии") алгоритм. Пока в таких случаях приходится иметь то, что дают - записи и прочие не ссылочные типы. Т.ч. "ничего личного", но чиста конкретный факультативный интерес (к маршаллингу).
глупыйглупый
Дата: 04.10.2005 17:53:05
в "маршаллингах" не шибко силен я.
"стандартный" строится на прокси-стабах, кастом - как напишешь, такой и будет. По твоему желанию - будет физическую двоичную копию объекта клиенту передавать. Эти дороги не закрыты. И даже одно время их точили под удаленный доступ к данным.


автор
А именно - в т.ч. - параллельных/конкурентных вычислений, что может иметь применение в системах с массовым параллелизмом, для которых пока приходится строить вместо объектов типы, клонируемые либо Let-ами либо LSet-ами что не всегда столь же удобно, как объекты.


Скажем так - я точно знаю, что на ваське (шестом) можно сделать все практически из того, что вообще можно сделать в операционной системе типа виндовс.
Сам я этого не умею, правда. Кроме того, по наблюдениям за умельцами сложилось ясное впечатление, что в содержательных случаях это больше на спорт похоже, чем на программирование.
Но, как бы то ни было, легко представляю себе как вб массово - параллельно что-то проворачивает...
По поводу "Lset - неудобно."
Поскольку это всего лишь операция копирования памяти - как раз в означенных случаях это не неудобно, а просто опасно.
Обмануть COM - не большая задача. Не больно он и прятался.
Систему, наверно тоже не грохнешь. А работать дбудет до первого случая.


вапще - ежели залезать ему в кишки - кастом маршаллинг и на вб пишется. По крайней мере теоретически.
так я думаю.


а еще вообщистей - лучше в рамках конкретной задачи за тему цепляться. Может што дельное и получится.