visual sub specify parameter net must vb.net visual-studio-2010 byref byval

vb.net - sub - optional parameters must specify a default value



¿Por qué ya no es necesario indicar ByVal/ByRef? (3)

Parece que esta publicación cubre tu pregunta:

http://msmvps.com/blogs/carlosq/archive/2011/03/15/vs-2010-sp1-changing-quot-byval-quot-vb-net-code-editor-experience.aspx

Entonces no, no hay forma de obtener el viejo comportamiento. A partir de ahora, ByVal es el valor predeterminado (lo que era antes) y no se agregará automáticamente a los parámetros del método.

En mi opinión, esta es una buena decisión ya que hace que VB.NET sea un poco más consistente con C # y evita los "ruidos" innecesarios (ya es lo suficientemente prolijo).

Viejo comportamiento:

Private Sub test(ByVal test As String) End Sub

Nuevo comportamiento

Private Sub test(test As String) End Sub

Acabo de instalar el Service Pack de Visual Studio 2010 (propuesto en Windows Update) y puedo ver una nueva función en el "intellisense", lo que significa que cuando escribo una Function o Sub en VB.NET no se completan automáticamente los parámetros con ByRef o ByVal ...

1) ¿Hay alguna forma de que pueda configurar esta opción como antes?

2) Si no especifico ByX , ¿cuál se usa por defecto? (parece que siempre es ByRef )


Tenga cuidado al transferir rutinas a VBA, donde el valor predeterminado es ByRef (consulte, por ejemplo, "El método predeterminado de aprobación de parámetros" en la parte inferior de esta página , por el gran Chip Pearson). Eso puede ser complicado


Tim cubrió lo que preguntó directamente, pero hay algo más a tener en cuenta es que cualquier variable de tipo de referencia, como una clase definida por el usuario, incluso si se pasa por valor, le permitirá realizar cambios en las propiedades de las instancias, etc. que permanezcan. Sin embargo, no le permitirá cambiar el objeto completo. ¿Cuál puede ser el motivo por el que le pareció estar incumpliendo por referencia?

Public Sub (Something As WhateverClass) Something = New WhateverClass ''will result in no changes when outside this method Something.Property1 = "Test" ''will result in an updated property when outside this method End Sub

Desde MSDN :

El valor de un tipo de referencia es un puntero a los datos en otra parte de la memoria. Esto significa que cuando pasa un tipo de referencia por valor, el código de procedimiento tiene un puntero a los datos del elemento subyacente, aunque no puede acceder al elemento subyacente. Por ejemplo, si el elemento es una variable de matriz, el código de procedimiento no tiene acceso a la variable en sí, pero puede acceder a los miembros de la matriz.