L'ordine di inizializzazione dei campi di classe in VB.NET può essere influenzato dai riferimenti ad altri campi?
-
29-10-2019 - |
Domanda
Prendi questo codice di esempio:
Class Foo
ReadOnly name As String
Public Sub New(name As String, dependentUpon As Foo)
Me.name = name
Console.Write("{0} created. ", name)
Console.WriteLine("Dependent upon {0}.", If(dependentUpon IsNot Nothing,
dependentUpon.Name,
"nothing"))
End Sub
End Class
Class Bar
ReadOnly dependent As New Foo("Dependent", independent) ' <-- !!!
ReadOnly independent As New Foo("Independent", Nothing)
End Class
L'output di New Bar()
è:
Dependent created. Dependent upon nothing.
Independent created. Dependent upon nothing.
Sembra che i campi siano inizializzati nello stesso ordine in cui appaiono nel codice sorgente, che (a) porta a un risultato inaspettato e (b) sembra un po 'sconcertante, dato che normalmente non è permesso leggere da variabili non inizializzate. Net, eppure sembra funzionare bene sopra.
Mi sarei aspettato che VB.NET fosse abbastanza intelligente da inizializzare prima i campi referenziati, e solo allora quelli che lo fanno riferimento; cioè mi sarebbe piaciuto vedere questo output invece:
Independent created. Dependent upon nothing.
Dependent created. Dependent upon Independent.
Qualcuno sa un modo per convincere Vb.net a comportarsi così, senza semplicemente dover scambiare l'ordine di dichiarazione di dependent
e independent
Inside Class Bar
?
Nessuna soluzione corretta