VB.Net, EventArgs, ByRef и ByVal - PullRequest
       39

VB.Net, EventArgs, ByRef и ByVal

1 голос
/ 15 декабря 2011

В 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 class) не скопированы или дублированы в памяти?

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

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

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

1 голос
/ 15 декабря 2011

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

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

0 голосов
/ 15 декабря 2011

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

...