C #에서 정적 생성자는 언제 호출?
정적 생성 영구 포함하는 클래스가있는 경우에 해당 클래스를 포함하는 어셈블리가 처음로드 해당 클래스에 대한 첫 번째 참조가 적중 될 때 해당 생성 호출 검증?
처음으로 수업에 액세스 할 때.
정적 번자는 정적 데이터를 초기화하거나 한 번 수행해야하는 작업을 수행해야합니다. 첫 번째 인스턴스가 생성되거나 정적 멤버가 참조되기 전에 자동으로 호출됩니다.
간단한 문서화에도 불구하고 예상보다 앞머리. Jon Skeet의 가이드 http://csharpindepth.com/Articles/General/Beforefieldinit.aspx 는이 질문에 대해 자세히 설명합니다.
요약 :
정적 생성자는 해당 클래스의 멤버에 대한 첫 번째 참조 (인스턴스 생성 또는 자체 정적 메서드 / 클래스 속성) 직전에 실행 보장 됩니다.
정적 초기화 프로그램 (정적 생성자가없는 경우)은 특정 필드를 처음 참조하기 전에 실행 실행 보장 됩니다.
정적 생성자는 클래스에서 어떤 것을 사용하기 전에 호출에서 발생하는 시점은 구현에 달려 있습니다.
첫 번째 정적 멤버에 액세스하기 전과 첫 번째 인스턴스가 생성되기 전에 호출 보장됩니다. 클래스가 사용되지 않을 경우 호출되지 않습니다.
부모 클래스에서 정적 메서드를 호출하는 경우 정적 생성자는 호출되지 않고 명시 적으로 지정됩니다. 다음은 b.methoda ()가 호출되면 b 생성자가 호출되지 않는 예제입니다.
static void Main(string[] args)
{
b.methoda();
}
class a
{
public static void methoda()
{
//using initialized method data
}
}
class b : a
{
static b()
{
//some initialization
}
}
많은 곳에서 그의 존재를 간단한 설명으로 이해하는 데 시간이 있습니다. 모든 문서와 설명은 첫 번째 클래스가 인스턴스화되거나 첫 번째 정적 필드가 참조되기 전에 정적 생성자 / 인티 얼라이 생성자 / 인티 얼라이 실행 실행자 "보장"된다고 주장합니다. 자신의 인스턴스 (닭 / 달걀)를 만드는 클래스에 정적 싱글 톤을려고 할 때 문제가 발생합니다. 이 경우 정적 생성자는 인스턴스 생성자 다음에 호출됩니다. 제 경우에는 인스턴스 생성자에 일부 정적 데이터에 의존하는 코드가 포함되어 있습니다.
정적 생성자는 정적 생성자 일시적인 수 있습니다. 이것은 버그입니까?
(나에게 대답은 싱글 톤을 별도의 클래스에 넣거나 필요하기 전에 인스턴스 생성자에서 정적 데이터를 수동으로 초기화하는 것이 었습니다)
참고 URL : https://stackoverflow.com/questions/1437352/when-is-a-static-constructor-called-in-c
'ProgramingTip' 카테고리의 다른 글
Objective-C에서 #define 대 const (0) | 2020.10.05 |
---|---|
선언 된 속성에 대한 점 표기법과 메시지 표기법 (0) | 2020.10.05 |
with-block 외부에서 사용할 수있는 with-statement로 정의 된 변수? (0) | 2020.10.04 |
mongodb에서 pandas로 데이터를 가져 오는 방법은 무엇입니까? (0) | 2020.10.04 |
애플리케이션이 Linux에서 계속 실행 확인하는 방법 (0) | 2020.10.04 |