VB.Net, EventArgs, ByRef и ByVal

В VB.Net у меня есть объект с именем WorkflowButtonEventArgs, который наследуется от System.EventArgs.

Класс WorkflowButtonEventArgs содержит два свойства ByRef. Это объекты, которые находятся в памяти, и я не хочу, чтобы они каким-либо образом дублировались или копировались.

Могу ли я передать WorkflowButtonEventArgs объект ByVal в VB.Net и сохранить в нем два определения ByRef в WorkflowButtonEventArgs?

В частности, если я передаю его ByVal:

Dim e As New WorkflowButtonEventArgs(...) ' e has some ByRef properties

RaiseEvent SomeEventName(e) ' e is passed ByVal

Не будут ли свойства / члены ByRef в e (WorkflowButtonEventArgs класс) копироваться или дублироваться в памяти?

Короче говоря: могу ли я пройти e ByVal, или мне нужно пройти ByRef, поскольку он содержит ByRef Properties?


person user1100622    schedule 15.12.2011    source источник
comment
Под свойством ByRef вы имеете в виду свойство для ссылочного типа, такого как класс?   -  person rskar    schedule 15.12.2011
comment
Что такое свойство ByRef? Насколько мне известно, ключевое слово ByRef не применяется к свойствам и не может использоваться при объявлении свойства. Можете быть более конкретными?   -  person Chris Dunaway    schedule 16.12.2011


Ответы (3)


Могу ли я передать «ByVal» или мне нужно передать «ByRef», поскольку он содержит свойства «ByRef»?

да. Объекты, на которые указывает ссылка, не будут скопированы, даже если ваш EventArgs передан ByVal.

person Reed Copsey    schedule 15.12.2011

Контрольные объекты не будут дублироваться в памяти. Ключевое слово ByRef в параметре означает только то, что вы можете изменить значение переменной, лежащей в основе аргумента в вызывающем коде.

person Magnus    schedule 15.12.2011
comment
Всем: Приношу свои извинения за ошибку в исходном сообщении. Свойства относятся к переменным ссылочного типа (в частности, классам / объектам). Похоже, я могу передать событие arg ByVal, и свойства ссылочного типа в событии arg не будут дублироваться в памяти. Звучит правильно? - person user1100622; 16.12.2011
comment
Контрольные объекты не будут дублироваться в памяти. ByVal или ByRef не имеет значения - person Magnus; 16.12.2011
comment
Хорошо ... это ответ на мой вопрос. Спасибо всем. - person user1100622; 16.12.2011

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

person sfuqua    schedule 15.12.2011