¿Puede el orden de inicialización de los campos de clase en VB.NET estar influenciado por referencias a otros campos?

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

Pregunta

Tome este código de muestra:

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

La salida de New Bar() es:

Dependent created. Dependent upon nothing.
Independent created. Dependent upon nothing.

Parece que los campos se inicializan en el mismo orden que aparecen en el código fuente, que (a) conduce a un resultado inesperado, y (b) parece un poco desconcertante, dado que normalmente no se le permite leer de variables no initializadas. Neto, sin embargo, eso parece estar funcionando bien arriba.

Hubiera esperado que VB.NET fuera lo suficientemente inteligente como para inicializar primero los campos referenciados, y solo entonces aquellos que lo hacen referencia; es decir, me hubiera gustado ver esta salida:

Independent created. Dependent upon nothing.
Dependent created. Dependent upon Independent.

¿Alguien sabe una manera de cómo hacer que VB.NET se comporte así, sin simplemente tener que cambiar la orden de declaración de dependent y independent clase interior Bar?

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top