Risposte:
No, non esiste un equivalente della out
parola chiave in VB.
Tuttavia, VB inizializza automaticamente tutte le variabili locali in un metodo, quindi è possibile utilizzarlo ByRef
senza dover prima inizializzare esplicitamente la variabile.
Esempio:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(Se si esamina il codice nel framework (ad esempio Double.TryParse ), è possibile che vengano visualizzati i <OutAttribute>
parametri aggiunti ai parametri, ma ciò fa la differenza solo quando viene eseguito il marshalling della chiamata per l'interoperabilità COM o l'invocazione della piattaforma.)
ByRef
parametri. (Non succede con i parametri del tipo di valore.)
Nothing
a loro eliminerà l'avviso anche se non cambia il risultato.
Nothing
li ho assegnati . È solo dispendioso in termini di tempo poiché devo farlo centinaia di volte in un grande sito Web legacy. Grazie per aver indagato.
Out
attributo non è equivalente alla out
parola chiave C # .
No, non esiste un costrutto equivalente che consenta di passare una variabile non inizializzata a un metodo senza un avviso, ma, come menzionato nella mia domanda e risposta che specifica un <Out()>
attributo sulla ByRef
definizione di un parametro, sebbene VB lo ignori, viene trattato da C # come out
parametro.
Quindi, pre-inizializzo le variabili di riferimento Nothing
e le specificherei <Out()> ByRef
per indicare l'intenzione (funzionerà se gli utenti C # accedessero ai tuoi metodi).
Se ritieni di sapere quando intendi accedere al valore predefinito Nothing
in variabili di riferimento altrimenti non assegnate, puoi impostare la "Configurazione avvertenza" "Uso della variabile prima dell'assegnazione" su "Nessuno" a livello di progetto (Proprietà progetto> Compila, e probabilmente tu si desidera impostare la configurazione su "Tutte le configurazioni" prima di modificare questa impostazione) oppure, in VS2015 (VB.NET 14), è possibile utilizzare #Disable Warning BC42030
.
Versione C #
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Versione Vb.net
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
Aggiornare
Come indicato nel commento, non dimenticare di inizializzare il parametro che verrà utilizzato nello slot di uscita
Ho avuto il problema in VB.NET che ho chiamato una funzione "per ref" che ha restituito un array.
Anche se il compilatore lo ha contrassegnato come un avvertimento, è andato tutto bene. La soluzione è semplicissima e probabilmente una buona pratica di programmazione.
Ho cambiato
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
per
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
Aiuta anche durante la codifica se i nomi delle variabili sono descrittivi ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
È possibile utilizzare il metodo passaggio per riferimento in VB.NET.
È necessario il meccanismo del parametro Out in C #, perché non consente di utilizzare alcuna variabile senza inizializzarla.
VB.NET non necessita di una parola chiave speciale poiché lo fa automaticamente da solo.
Basta usare ByRef.
VB ha l'attributo che dovrebbe essere lo stesso di C # out ma ancora oggi ricevi un avviso anche se lo usi. Ci sono dettagli su come risolverlo nell'area vblang di GitHub. https://github.com/dotnet/vblang/issues/67 .
Object
, quindi non può essere utilizzata per unByRef x As Integer
parametro).