Uma das coisas chatas que eu considero no Visual Basic .NET é a questão do ByVal nos parametros dos procedimentos. Como todos sabem, se não especificarmos nada quando estamos criando os parametros de um determinado procedimento, por default é colocado ByVal.
Até então sem muitos problemas. Então vou lá e crio um procedimento qualquer, com um parametro do tipo ArrayList e, como não especifiquei se quero ByVal ou ByRef, o editor automaticamente embutiu o maldito ByVal. Pois bem, a questão é que mesmo com ByVal, se eu passar o meu objeto ArrayList para o procedimento e dentro dele alterar esse objeto, como adicionar ou remover elementos, isso refletirá no meu objeto original, ou seja, o comportamento é ByRef.
Isso funciona da mesma forma para tudo o que são objetos no .NET, com excessão dos value-types. Mesmo sem a keyword ByRef, se o objeto sofrer alguma alteração, isso será considerado, já que apontará para o mesmo local – objetos sempre serão ByRef. Será que não havia uma forma de automatizar isso, pois ficaria muito mais legível e de fácil entendimento.