VB.NETのクラスフィールドの初期化順序は、他のフィールドへの参照の影響を受けることができますか?
-
29-10-2019 - |
質問
このサンプルコードを取ります:
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をそのように動作させる方法を知っていますか? dependent
と independent
クラス内 Bar
?
正しい解決策はありません
所属していません StackOverflow