2010-06-14 4 views
1

1) 클래스 인스턴스가 없는데도 멤버 상수를 사용할 수있는 이유는 무엇입니까?해당 클래스의 인스턴스가없는 경우에도 멤버 상수를 사용할 수 있습니까?

2) 컴파일러가 상수 변수를 리터럴 값으로 대체하기 때문에 상수 표현식을 컴파일 타임에 완전히 평가해야하는 유일한 이유는 무엇입니까?

3) 문자열도 객체이기 때문에 다음과 같이 오류가 발생한다고 생각하지만 그렇지 않습니다. 왜? 인스턴스에 따라서 필요가 없습니다 -

class A 
{ 
    const string b = “it works”; 
} 

당신에게 ( const 선언)

답변

7
  1. 상수 implicitly static 감사합니다.

  2. const 값이 선언 년대 어셈블리에 포함하고 그것을 의 때마다 그 값뿐만 아니라 호출 코드에 복사, 사용된다. 따라서 실행시 평가할 수 없습니다. 동작을 원하면 static readonly을 사용하십시오.

  3. 문자열 리터럴은 C# 언어 사양에 따라 상수 값입니다. 기본적으로 IL에는 문자열에 대한 메타 데이터 표현이있어이를 상수로 지정할 수 있습니다. 문자열 상수에는 인턴과 같은 다른 흥미로운 속성이 있습니다. 관심의

한 점은 : 어떤 문자 형태가 없습니다 ... 정말 CLR을 지원하지 당신은 C#에서 constdecimal 필드를 선언 할 수 있지만 그 않습니다. C# 컴파일러는 [DecimalConstant] 특성을 사용하여 위조합니다. 그래서 십진법을 속성 인수 유형으로 사용할 수 없습니다.

+2

에릭 리 퍼트 (Eric Lippert)는 지난 금요일에 다음과 같이 말했습니다. http://blogs.msdn.com/b/ericlippert/archive/2010/06/10/don-t-repeat-yourself-consts-are-already-static.aspx – Joey

+0

@Johannes : 방금 그 게시물을 파 냈습니다. –

+0

이 댓글에서 금요일은 목요일을 의미합니다. –

관련 문제