L'ordre d'initialisation des champs de classe dans VB.NET peut-il être influencé par des références à d'autres champs?

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

Question

Prenez cet exemple de code:

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 sortie de New Bar() est:

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

Il semble que les champs soient initialisés dans le même ordre qu'ils apparaissent dans le code source, ce qui (a) conduit à un résultat inattendu, et (b) semble un peu déroutant, étant donné que l'on n'est normalement pas autorisé à lire à partir de variables non initialisées. Net, pourtant cela semble fonctionner bien au-dessus.

Je m'attendrais à ce que VB.NET soit assez intelligent pour initialiser d'abord les champs référencés, et seulement ceux qui le font référence; c'est-à-dire que j'aurais aimé voir cette sortie à la place:

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

Quelqu'un sait-il un moyen de faire en sorte que VB.net se comporte comme ça à la place, sans simplement avoir à échanger l'ordre de déclaration de dependent et independent classe intérieure Bar?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top