VB.NET a-t-il un équivalent direct des paramètres de la fonction C # out
, où la variable transmise à une fonction n'a pas besoin d'être initialisée?
Non, il n'y a pas d'équivalent du mot clé out
en VB.
Cependant, VB initialise automatiquement toutes les variables locales d'une méthode. Vous pouvez donc utiliser ByRef
sans avoir à initialiser explicitement la variable.
Exemple:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(Si vous examinez le code dans la structure (par exemple, Double.TryParse ), le <OutAttribute>
sera ajouté aux paramètres, mais cela ne fera une différence que lorsque l'appel sera organisé pour un appel interop ou de plate-forme.
Non, il n'y a pas de construction équivalente permettant à une variable non initialisée d'être passée à une méthode sans avertissement, mais, comme indiqué dans mon question et réponse spécifiant un attribut <Out()>
sur une définition de paramètre ByRef
, bien que VB l'ignore, est traité par C # comme un paramètre out
.
Je voudrais donc pré-initialiser les variables de référence sur Nothing
et spécifier <Out()> ByRef
pour indiquer l'intention (cela fonctionnera si les utilisateurs de C # accèdent à vos méthodes).
Si vous pensez savoir quand vous avez l'intention d'accéder à la variable Nothing
par défaut dans des variables de référence non affectées, vous pouvez définir la "Configuration de l'avertissement" "Utilisation de la variable avant l'affectation" sur "Aucune" au niveau du projet. (Propriétés du projet> Compiler, et vous voudrez probablement définir Configuration sur "Toutes les configurations" avant de modifier ce paramètre) ou, dans VS2015 (VB.NET 14), vous pouvez utiliser #Disable Warning BC42030
.
Version C #
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Version vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
Vous avez trouvé la réponse ici
Mettre à jour
Comme indiqué dans le commentaire, n'oubliez pas d'initialiser votre paramètre qui sera utilisé dans le slot out
J'ai eu le problème dans VB.NET que j'ai appelé une fonction "par référence" qui a renvoyé un tableau.
Même si le compilateur l'a signalé comme un avertissement, tout allait bien. Le correctif est super simple et probablement une bonne pratique de programmation.
J'ai changé
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
à
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
Cela aide également lors du codage si les noms de variables sont descriptifs ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
VB a l'attribut qui devrait être identique à C # out mais aujourd'hui, vous recevez toujours un avertissement même si vous l'utilisez. Il y a des détails sur la réparation dans la zone vblang de github. https://github.com/dotnet/vblang/issues/67 .
Vous pouvez utiliser la méthode pass par référence dans VB.NET.
Vous avez besoin du mécanisme de paramètre Out en C #, car il ne vous permet d'utiliser aucune variable sans l'initialiser.
VB.NET n'a pas besoin d'un mot clé spécial, car il le fait automatiquement.
Il suffit d'utiliser ByRef.