2009-08-17 7 views
11

:C# :이 필드 할당은 안전한가요? 이 조각에서

class ClassWithConstants 
{ 
    private const string ConstantA = "Something"; 
    private const string ConstantB = ConstantA + "Else"; 

    ... 

} 

ConstantB == "Else"와 결말의 위험이 있습니까? 또는 assigments가 선형 적으로 발생합니까?

+0

@Svish, 그의 대답 –

+0

@Nathan에 존 소총의 의견을 참조하시기 바랍니다, 감사합니다,이 발견하지 않았다 : P – Svish

답변

37

을 평가해야합니다 당신은 항상 "SOMETHINGELSE"를 얻을 것이다. 이것은 ConstantB가 ConstantA에 의존하기 때문입니다.

줄을 전환 할 수도 있고 같은 결과가 나옵니다. 컴파일러는 ConstantB가 ConstantA에 종속된다는 것을 알고 있으므로 부분 클래스로 작성하더라도 ConstantA를 적절히 처리합니다.

VS 명령 프롬프트를 실행하고 ILDASM을 호출 할 수 있는지 확실히 확인하십시오. 거기에서 실제 컴파일 된 코드를 볼 수 있습니다.

private const string ConstantB = ConstantA + "Else"; 
private const string ConstantA = "Something" + ConstantB; 

오류 : 당신은 당신이 컴파일 오류가 얻을 것이다 다음 작업을 수행하려고하면

또한, 'ConsoleApplication2.Program.ConstantB'에 대한 상수 값의 평가를 원형 정의를 포함 이 종류의 컴파일러는 종속성을 알고 있습니다.


추가 : 사양 참조 Jon Skeet 지적 :

This is explicitly mentioned in section 10.4 of the C# 3 spec: Constants are permitted to depend on other constants within the same program as long as the dependencies are not of a circular nature. The compiler automatically arranges to evaluate the constant declarations in the appropriate order.


+2

그래, 당신은 다시 맞아! :) 이것을 보장하는 사양의 비트를 찾고 ... –

+0

지금 발견 - 10.4 절. –

+3

적어도 내 대답을 편집하여 사람들을 오해하지는 않겠지 만 가능한 경우 삭제합니다. –

3

문자열 리터럴 만 있기 때문에이 문자열 연결은 컴파일 타임에 발생합니다 (컴파일러 구성 자료에서 상수 검색 ).

걱정하지 마십시오.

2

그것은 항상에 "SOMETHINGELSE"

관련 문제