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

안녕하세요

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]

... 31  32  33  34  35  [36]  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4966포플러3/30/20189588    답변글 [답변]: C# 응용프로그램 (Winform)에서 unhandledexception 발생시 프로그램이 죽는 현상 이외에 재부팅될 수도 있을까요? [1]
4961김민욱3/26/201810511레이더 뷰어의 구현 방법(이미지 확대 축소 관련) [2]
4960hurd...3/18/201810202OCX 관련한 질문을 드리고자 합니다. [1]
4959익명3/10/20189222교재 199page 델리게이트와 object를 이용한 범용 정렬 코드 [1]
4957멍멍이2/13/20189855System.Console - WriteLine함수의 제너릭 사용 [1]
4956김성대2/12/20189179asp.net 질문입니다. [1]
4955웅이2/12/20189633[삭제] WPF에서 list 속도 향상하는 방법이 있을까요?
4954초보자2/8/201811414FFT Library 사용 [1]
4950ASP열공2/5/20189180asp.net 과 C# 을 이용해서 홈페이지 만드는 질문입니다. [1]
4951ASP열공2/6/201810144    답변글 [답변]: asp.net 과 C# 을 이용해서 홈페이지 만드는 질문입니다. [1]
4952ASP열공2/7/20189307        답변글 [답변]: [답변]: asp.net 과 C# 을 이용해서 홈페이지 만드는 질문입니다. [1]
4953ASP열공2/7/20188828            답변글 [답변]: [답변]: [답변]: asp.net 과 C# 을 이용해서 홈페이지 만드는 질문입니다.
4949김성대1/31/201810521비동기 질문입니다. [3]파일 다운로드1
494880511/31/20189288C# 7.1책 보다가 질문드립니다 [1]
4947김성대1/30/201810571[삭제] 비동기 질문입니다. [2]파일 다운로드2
4946윤현수1/29/201810077비동기 TCP통신 데이터 문제 [4]파일 다운로드1
4945김성대1/26/20188652비동기 질문입니다. [1]파일 다운로드1
4944popo1/25/20188040[삭제] 스레드 안에서 Window Visibility 변경시 DialogResult 오류 질문
4943김성대1/22/20189012FromAsync 질문입니다. [1]
4942박현일1/19/201810645WPF 공부중 모르는 문법이 있어서요~^^; [2]
4941김성대1/18/20188924비동기예약어 실행오류관련입니다. [1]
4940plzh...1/10/20189795webbrowser2 를 이용한 sns 로그인 구현 관련 문의 [2]
4939이성일1/4/201811289ClickOnce 배포 후 업데이트 시 발생하는 오류에 대해 질문 드립니다. [2]
4938김성대1/3/20189335채팅 프로그램관련 질문입니다. [9]파일 다운로드1
4937Ques...1/3/201811711C# CPU 사용량 한계치 늘리는 방법 [2]
4936무개1/3/20188839책 내용 인용하는 것에 관한 질문이있습니다. [1]파일 다운로드1
... 31  32  33  34  35  [36]  37  38  39  40  41  42  43  44  45  ...