문제

아래의 C # 코드가 주어지면 개인 데이터 멤버 _UserDataStorage 를 즉시 초기화 할 것으로 예상했습니다.대신 모두 초기화되지 않는 것을 발견합니다.초기화 문에 중단 점을 넣었으며 결코 치지 않습니다.즉, DB 정적 속성은 항상 NULL을 반환합니다.정적 클래스는 비 정적 클래스와 다르게 작동합니까?

public static class UserDataStorageWrapper
{
    private static UserDataStorage _userDataStorage = new UserDataStorage();

    public static UserDataStorage DB
    { 
        get
        {
            return _userDataStorage;
        }
    }
}
.

코드를 변경하여 NULL을 확인하고 _UserDataStourage를 지금 초기화합니다.그러나 나는 여기서 기대에 대해 확신 할 수 있습니다.

도움이 되었습니까?

해결책

정적 생성자를 추가하고 내부 변수를 초기화하십시오.

public static class UserDataStorageWrapper
{
    public static UserDataStorageWrapper()
    {
        _userDataStorage = new UserDataStorage();
    }

    private static UserDataStorage _userDataStorage;

    public static UserDataStorage DB
    { 
        get
        {
            return _userDataStorage;
        }
    }
}
.

" 정적 생성자가 클래스에 존재하면 정적 필드 초기화기 의 실행은 정적 생성자 " "을 실행하기 직전에 발생합니다." "href="http://msdn.microsoft.com/en-us/library/aa645758%28v=vs.71%29.aspx"rel="nofollow"> 소스

다른 팁

정적 이니셜 라이어이므로 해당 클래스의 정적 필드를 처음 사용하기 전에 구현적으로 의존적 인 시간에 초기화 될 것입니다. 소스

이 해당 필드 (또는 해당 클래스의 다른 정적 필드)를 사용하지 않는 한 중단 점이 을 히트하지 않을 수 있습니다.


완전성을 위해 정적 생성자가 있으면 정적 생성자 앞에 정적 필드 초기화 프로그램이 실행됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top