Поскольку вы используете конструкторы, а не встроенную инициализацию, компилятор VB не помечает типы как beforefieldinit
, и порядок точно контролируется.
Если, однако, вы написали следующее (используя встроенную инициализацию):
Option Strict On : Option Explicit On
Module Module1
Sub Main()
System.Console.WriteLine("Main")
Dim g = C.A
End Sub
End Module
Public Class C
Shared Function Narg() As A
Dim alpha As New A
System.Console.WriteLine("Init C")
Return alpha
End Function
Shared Property A As A = Narg()
End Class
Public Class A
Shared Sub New()
System.Console.WriteLine("Init A")
End Sub
Public Sub New()
System.Console.WriteLine("A Constructor")
End Sub
End Class
заказ не будет указан. Будет разрешен тот же порядок, что и в исходном коде, но C
можно инициализировать ранее. На самом деле, в моей системе вывод:
Init A
A Constructor
Init C
Main
Причина в том, что C
теперь помечен beforefieldinit
.
Бесполезный придирки: нет, ваш исходный код не гарантирует такой вывод. В сборке релиза он не будет выводиться, потому что System.Diagnostics.Debug
условно вызывается.