¿Hay un equivalente en VB.NET de los parámetros de salida de C#?
c#-to-vb.net out-parameters (7)
No, no existe una construcción equivalente que permita pasar una variable no inicializada a un método sin advertencia, pero, como mencioné en mi pregunta y respuesta, especificando un atributo <Out()>
en una definición de parámetro ByRef
, aunque VB ignora es tratado por C # como un parámetro de out
.
Entonces, preinicializaría las variables de referencia a Nothing
y especificaría <Out()> ByRef
para indicar la intención (eso funcionará si los usuarios de C # alguna vez tienen acceso a sus métodos).
Si cree que sabe cuándo tiene la intención de acceder al valor predeterminado Nothing
en variables de referencia no asignadas, puede configurar la "Configuración de advertencia" "Uso de la variable antes de la asignación" en "Ninguno" en el nivel del Proyecto (Propiedades del proyecto> Compilar, y probablemente desee establecer Configuración en "Todas las configuraciones" antes de cambiar esta configuración) o, en VS2015 (VB.NET 14), puede usar #Disable Warning BC42030
.
¿Tiene VB.NET un equivalente directo a los parámetros de la función de out
C #, donde la variable transferida a una función no necesita ser inicializada?
No, no hay un equivalente de la palabra clave out
en VB.
Sin embargo, VB inicializa automáticamente todas las variables locales en un método, por lo que puede usar ByRef
sin necesidad de inicializar explícitamente la variable.
Ejemplo:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(Si examina el código en el marco (por ejemplo, Double.TryParse ), puede ver que se <OutAttribute>
a los parámetros, pero eso solo hace la diferencia cuando la llamada se organiza para la interoperabilidad COM o la invocación de la plataforma).
Puede usar el método de pase por referencia en VB.NET.
Necesita el mecanismo del parámetro Out en C #, porque no le permite usar ninguna variable sin inicializarlo.
VB.NET no necesita una palabra clave especial, ya que lo hace automáticamente.
Solo usa ByRef.
Tuve el problema en VB.NET que llamé a una función "por ref" que pasó una matriz de nuevo.
Aunque el compilador lo marcó como advertencia, estaba bien. La solución es una práctica de programación súper simple y probablemente buena.
Cambié
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
a
'' Even though ''Nothing'' is the default value, setting it
'' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
También ayuda al codificar si los nombres de variables son descriptivos ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
Use la palabra clave ByRef antes de la variable.
VB tiene el atributo que debería ser el mismo que el de C #, pero hoy todavía obtienes una advertencia incluso si la usas. Hay detalles sobre cómo arreglarlo en el área vblang de github. https://github.com/dotnet/vblang/issues/67 .
Versión C #
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Versión de Vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
Actualizar
Como se indica en el comentario, no olvide inicializar su parámetro que se utilizará en la ranura de salida