このサンプルコードを見てください:
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)の初期化されていない変数からの読み取りが通常許可されていないことを考えると、少し不可解に思えます。 NET、それでもそれは上でうまく機能しているようです。
VB.NETは、最初に参照フィールドを初期化し、次にそれを参照するフィールドを初期化するのに十分スマートであると期待していました。つまり、代わりにこの出力を見たかったのです。
Independent created. Dependent upon nothing.
Dependent created. Dependent upon Independent.
クラス内の宣言順序dependent
を単純に入れ替えることなく、代わりにVB.NETをそのように動作させる方法を誰かが知っていますか?independent
Bar