2012-02-04 2 views
3

var b = new B()가 먼저 static B() .ctor 및 static A().ctor보다가 아니라 그 반대의 경우도 마찬가지 인스턴스 생성자처럼 입력하는 이유 (public A()public B()보다)를합니까?정적 .ctors를 입력하는 순서가 상속 된 클래스의 인스턴스 .ctors와 다른 이유는 무엇입니까?

public class A 
{ 
    static A() {} 
    public A() {} 
} 

public class B : A 
{ 
    static B() {} 
    public B() {} 
} 
+3

이것은 기본적으로 [모든 정적 생성자가 C#에서 호출되지는 않습니다]와 같습니다 (http://stackoverflow.com/questions/6503588/why-arent-all-static-constructors-called-in-c- 날카로운 즉, 그 부모 - c), 그리고 대답은 기본적으로 동일합니다 : 정적 생성자가 상속되지 않습니다. –

답변

2

기술적으로 B 인스턴스 생성자가 먼저 입력됩니다. 하지만 먼저 생성자를 호출하여 A을 호출 한 다음 사용자 정의 본문으로 이동합니다.

그래서 나는 B의 생성자가 입력되기 전에 B의 정적 생성자를 실행해야한다고 가정합니다.

B의 생성자는 A의 정적 생성자를 트리거하는 A의 생성자를 호출합니다.

+1

정적 생성자에 대한 규칙은 언어 사양에서 자세히 설명합니다. 특히 정적 생성자는 "클래스 유형의 인스턴스가 생성되거나 [또는] 클래스 유형의 정적 멤버가 참조 될 때"실행됩니다. "파생 된 형식의 정적 멤버가 참조됩니다"는 목록에 없습니다. –