¿Puede el orden de inicialización de los campos de clase en VB.NET estar influenciado por referencias a otros campos?
-
29-10-2019 - |
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