정적 클래스에서 초기화되지 않은 정적 개인 데이터 멤버?
-
24-12-2019 - |
문제
아래의 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"> 소스
다른 팁
정적 이니셜 라이어이므로 해당 클래스의 정적 필드를 처음 사용하기 전에 구현적으로 의존적 인 시간에 초기화 될 것입니다. 소스
이 해당 필드 (또는 해당 클래스의 다른 정적 필드)를 사용하지 않는 한 중단 점이 을 히트하지 않을 수 있습니다.
완전성을 위해 정적 생성자가 있으면 정적 생성자 앞에 정적 필드 초기화 프로그램이 실행됩니다.
제휴하지 않습니다 StackOverflow