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
Свойства?
3 ответа
Могу ли я передать e "ByVal", или мне нужно передать его "ByRef", так как он содержит свойства "ByRef"?
Да. Объекты, на которые указывает ссылка, не будут скопированы, даже если ваш EventArgs
Передано ByVal.
Ссылочные объекты не будут дублироваться в памяти. ByRef
Ключевое слово только для параметра означает, что вы можете изменить значение переменной, лежащей в основе аргумента в вызывающем коде.
Еще один способ достичь вашей цели - создать синглтон, в котором будут храниться два свойства.