【发布时间】:2011-06-19 16:51:54
【问题描述】:
获取此示例代码:
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.
是否有人知道如何让 VB.NET 表现得像这样,而无需简单地交换 dependent 和 independent 在类 Bar 内的声明顺序?
【问题讨论】:
标签: vb.net field initialization-order