Risposte:
No, non esiste un equivalente della outparola chiave in VB.
Tuttavia, VB inizializza automaticamente tutte le variabili locali in un metodo, quindi è possibile utilizzarlo ByRefsenza 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.)
ByRefparametri. (Non succede con i parametri del tipo di valore.)
Nothinga loro eliminerà l'avviso anche se non cambia il risultato.
Nothingli ho assegnati . È solo dispendioso in termini di tempo poiché devo farlo centinaia di volte in un grande sito Web legacy. Grazie per aver indagato.
Outattributo non è equivalente alla outparola 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 ByRefdefinizione di un parametro, sebbene VB lo ignori, viene trattato da C # come outparametro.
Quindi, pre-inizializzo le variabili di riferimento Nothing e le specificherei <Out()> ByRefper indicare l'intenzione (funzionerà se gli utenti C # accedessero ai tuoi metodi).
Se ritieni di sapere quando intendi accedere al valore predefinito Nothingin 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 Integerparametro).