.NET 클래스 로더가 작동하는 표준 방법이 있습니까?.NET 클래스 로더가 작동하는 표준 방법이 있습니까?
Option Strict On : Option Explicit On
Module Module1
Sub Main()
System.Diagnostics.Debug.WriteLine("Main")
Dim g = C.A
End Sub
End Module
Public Class C
Shared Sub New()
System.Diagnostics.Debug.WriteLine("Init C")
End Sub
Shared Property A As New A
End Class
Public Class A
Shared Sub New()
System.Diagnostics.Debug.WriteLine("Init A")
End Sub
Public Sub New()
System.Diagnostics.Debug.WriteLine("A Constructor")
End Sub
End Class
나는 다음과 같은 출력이 (모든 구현 된 플랫폼에서) 컴파일 된 코드는 것입니다 보장 할 수 있습니다 :
는이 코드를 컴파일 말해봐?
Main
Init A
A Constructor
Init C
"클래스 로더"는 다른 것을 의미합니다. 당신은 일명 "정적 생성자"인 "클래스 이니셜 라이저"에 대해 이야기하고 있습니다. –
Jon Skeet이 형식 초기화 (일부 .NET 4 변경 사항 포함)에 대해 설명합니다. http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-initialization-changes-in-net-4-0. aspx – Govert
@Hans : 아마도 그렇지만 런타임 클래스 로더가 특정 시간에 * type initializer *를 호출 할 수 있는지 여부를 궁금해하는 것도 합리적입니다. (사실, 클래스 로더가'beforefieldinit'라고 표시된 타입에 대해서만 그렇게하는 것은 합당합니다. 그렇지 않다면, * 타입 이니셜 라이저는 나중에 spec에서 지시 된대로 호출되어야합니다.) –