Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > ByRef vs ByVal


Автор: ivashkanet 13.6.2006, 17:02
Всем привет, возник такой вопрос:

Событие в обработчик поступает с двумя параметрами: sender and eventargs по умолчанию они byval.
Не значит ли это что идет копирование sender  и eventargs в новый объект (ИМХО, да)?
Если так, то лучше поставить его byref. Зачем создавать клон объекта, ведь это ест время smile 

Заранее спасибо. Выслушаю любое ваше мнение.
P.S. В C# все было хорошо, все объекты итак, по умолчанию, передавались по ссылке. 

Автор: Akina 13.6.2006, 17:27
чтобы процедура, прерванная обработчиком, не обнаружила внезапное изменение переменной, собсно... 

Автор: Exception 13.6.2006, 18:20
http://msdn.microsoft.com/library/en-us/vbcn7/html/vaconargumentpassingbyvalue.asp

Цитата
If you pass a variable argument by value using the ByVal keyword, the procedure cannot modify the variable itself. However, if the argument is a reference type, you can modify the members of the object to which it points, even though you cannot replace the object itself. In particular, you can modify the members of the object. For example, if the argument is an array variable, you cannot assign a new array to it, but you can change one or more of its elements. The changed elements are reflected in the underlying array variable in the calling code.


То есть это примерно то же самое, что работать с константой:

Код
Sub SomeSubroutine(ByVal aParam As SomeObject) ' SomeObject - ссылочный тип
    aParam.SomeProperty = 10
    aParam = New SomeObject() ' это делать нельзя
    aParam = Nothing ' и это тоже!
End Sub


Таким образом, никакого копирования не проишодит - просто объект нельзя "подменить".

А вот структурные типы (производные от System.ValueType) копировались бы. 

Автор: ivashkanet 13.6.2006, 18:24
AkinaException, спасибо большое. 

Автор: Exception 13.6.2006, 18:28
Не за что, заходи ещё smile  

Автор: ivashkanet 14.6.2006, 09:34
Цитата(Exception @  13.6.2006,  18:28 Найти цитируемый пост)
 заходи ещё

А я и не ухожу  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)