VB.NETのクラスフィールドの初期化順序は、他のフィールドへの参照の影響を受けることができますか?

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

質問

このサンプルコードを取ります:

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

の出力 New Bar() は:

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

フィールドはソースコードに表示されるのと同じ順序で初期化されているようで、(a)予期しない結果につながり、(b)は通常、非初期化された変数から読み取られないことを考えると、少し困惑しているようです。ネットですが、それは上記でうまく機能しているようです。

VB.NETは、最初に参照されたフィールドを初期化するのに十分なほど賢くなると予想していたでしょう。つまり、代わりにこの出力を見たいと思っていました。

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

誰かが代わりにVB.NETをそのように動作させる方法を知っていますか? dependentindependent クラス内 Bar?

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top