Microsoft MVP성태의 닷넷 이야기
안녕하세요 정적 멤버 초기화 관련 간단한 질문 [링크 복사], [링크+제목 복사],
조회: 12976
글쓴 사람
조민준
홈페이지
첨부 파일
 

안녕하세요

class ABC
{
   int a = 10;
   int b = 20;
   DEF Instance_def = new DEF(a, b); (X)
  

   static int c = 10;
   static int d = 20;
   static DEF static_def = new DEF(c, d); (O)
}

이렇게 멤버 이니셜라이즈 하는 경우에 생성자 인자로 인스턴스 멤버변수가 들어갈 수 없는 이유가 객체가 초기화될 때
어느 멤버 변수부터 초기화될지 보장이 안 되기 때문에 금지한다라고 이해하고 있었는데
이 논리가 맞다면 정적 멤버 초기화도 마찬가지가 아닌가해서요
정적 필드 초기화 시점이 정적 생성자가 호출되기 바로 직전으로 알고 있는데
이게 아니라 모든 정적 필드들은 컴파일 타임에 먼저 계산이 된다거나 하는 이유 때문인 것인가요? (const는 컴파일 타임에 값이 계산되는 것으로 알고 있음)
답변 감사드립니다








[최초 등록일: ]
[최종 수정일: 8/4/2022]


비밀번호

댓글 작성자
 



2022-08-04 09시55분
알고 계신 것처럼, 인스턴스(instance) 멤버의 경우에는 초기화 순서를 컴파일러가 임의대로 정합니다.

반면, 정적(static) 멤버의 경우에는 나열된 순서대로 초기화를 합니다. 따라서, 개발자가 정할 수 있으므로 오류를 발생시키지 않습니다. 그렇긴 해도, 잘못된 순서를 갖게 되면 경고는 발생시킵니다. 가령 다음의 코드를 보면,

class ABC
{
    static DEF static_def = new DEF(static_hij); // warning CS8604: Possible null reference argument for parameter 'hij' in 'DEF.DEF(HIJ hij)'.
    static HIJ static_hij = new HIJ(static_def);

    static ABC() { }
}

서로 전달하게 되면, 순서상 뒤에서 초기화하는 정적 변수의 사용에 대해 경고를 발생시킵니다.
정성태
2022-08-04 12시30분
[조민준] 감사합니다 ㅜㅜ 속이 시원합니다
[guest]

... 91  92  93  94  95  [96]  97 
NoWriterDateCnt.TitleFile(s)
45송야5/29/200413288웹페이지 자동로그인..
46정성태5/31/200414168    답변글 [답변]: 웹페이지 자동로그인..
44반데라이차5/26/200413287안녕하세요~저 오크에요~~^^* [1]
43이윤복4/22/200412124윤보기 입니다.
48정성태5/31/200413455    답변글 [답변]: 윤보기 입니다.
40김대웅2/26/200414456메일 드렸는데.. 읽어보셨는지 모르겠네요.. 많이 바쁘신것 같아요..
41정성태2/29/200413425    답변글 [답변]: 메일 드렸는데.. 읽어보셨는지 모르겠네요.. 많이 바쁘신것 같아요..
42정성태3/6/200414682    답변글 [답변]: 메일로 답변을 드렸는데. 메일이 자꾸 반송되네요. 여기서 답변드립니다.
38문우영1/19/200412928ㅋㅋ 한글 아이디도 되는군요.!!
39정성태1/26/200413544    답변글 [답변]: 다행이네요. ^^;
33신종화1/9/200414460성태님 오랬만이군요 ^^ 새해복 많이 받으세요
35정성태1/17/200412469    답변글 [답변]: 성태님 오랬만이군요 ^^ 새해복 많이 받으세요
32김기영1/5/200413251질문인데요... 웹브라우저로 text를 전송할 수 있을까요??
34정성태1/17/200412815    답변글 [답변]: 질문인데요... 웹브라우저로 text를 전송할 수 있을까요??
28박소연10/30/200316753c언어를 이용한 가계부 프로그램
31정성태12/17/200318227    답변글 [답변]: c언어를 이용한 가계부 프로그램
27임영택9/17/200313416atl com에서 Window Handle 구하고 싶은데(바쁘시더라도 꼭 답변 해주세요!!)
30정성태12/17/200313813    답변글 [답변]: atl com에서 Window Handle 구하고 싶은데(바쁘시더라도 꼭 답변 해주세요!!)
26임영택9/15/200312818IE에서 submit 버튼을 누를때 발생하는 이벤트를 받을수 있나요?
29정성태12/17/200312892    답변글 [답변]: IE에서 submit 버튼을 누를때 발생하는 이벤트를 받을수 있나요?
24임영택9/14/200312940실행중인 DLL과 통신하는 방법?
25임영택9/15/200313050    답변글 [답변]: 자답(해결했습니다)
21박용운7/29/200312672잠긴파일에서...
22박용운7/30/200314166    답변글 왜 MoveFileEx가 먹히지를 않을까요?
23박용운7/30/200314052        답변글 [자답]
19김진호7/28/200313182atl 디버깅
... 91  92  93  94  95  [96]  97