L'ordine di inizializzazione dei campi di classe in VB.NET può essere influenzato dai riferimenti ad altri campi?

StackOverflow https://stackoverflow.com/questions/6403755

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top