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:
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.