2010-07-28 3 views
0

나는 정적 인 읽기 전용 변수의 수를 저장하는 상수를 가지고있다.Constants 클래스의 정적 속성에 기초 필드를 구현해야합니까?

나는이 작업을 수행해야 : 나 종류의 중복 보인다

private static readonly int _maxThings = 100; 
... 
public static int MaxThings { get { return _maxThings; } } 

. 왜 내가 다음과 같이하지 않는 이유가 있을까요?

public static int MaxThings { get { return 100; } }

편집

좋아

때문에,이 질문의 뇌 방귀이었다. 나는이 값을 초기화 할 때 정적 백킹 필드를 사용하고 정적 자체 일 필요가없는 공용 get-only 속성을 노출하는 것이 중요하다고 생각합니다.

그러나 public static 속성을 어려운 값으로 설정하는 것이 편리하다면 그 사이에는 기능상의 차이가 없으며 어셈블리로 베이킹하면됩니다. 내가 여기에 놓치고있는 다른 개념이 없다면,이 경우에 그냥 const를 사용할 것입니다.

답변 해 주셔서 감사합니다.

+1

왜하지 않으려는 이유가 있습니까? public const int MaxThings = 100; – Anero

+1

@Anero, 누가 코드를 호출했는지에 따라, MaxThings이 실제로 상수가 아닐 수도 있습니다.진정으로 일정한 PI 또는 Zero와는 달리 MaxThings은 하루 200 일이 될 수도 있습니다. 상수 기호는 컴파일 타임에 바뀌므로 다른 어셈블리도 다시 컴파일 될 때까지 변경 사항을 "볼"수 없습니다. – Josh

답변

3

당신은 내가이 경우 속성을 사용하여 볼 수 있습니다 이유가 없다

public const int MaxThings = 100;

해야한다.

업데이트 - 의견에 응답 ..에서>

당신이 라이브러리를 개발하고 그것을 상수 INT .NET을 소비하는 방법을 이해하는 것이 중요 상수를 내보내는 경우. 라이브러리에 대해 컴파일 할 때 상수 값이 인라인되어 소모하는 응용 프로그램에 포함되므로 라이브러리가 업데이트 된 경우 이고 응용 프로그램을 사용하는 것이이 아닌 경우 이전 상수 값이 계속 유지됩니다. 물론 이것은 정적 속성을 사용해야하는 경우입니다.

라이브러리를 개발하지 않으면 const를 사용해도됩니다.

+2

http://stackoverflow.com/questions/755685/c-static-readonly-vs-const- 특히 @Marc Gravell의 답변을 참조하십시오. "상수"가 변경되어 다른 어셈블리에서 사용되는 경우 정적 속성을 고려할 수 있습니다. – TrueWill

+1

TrueWill에 동의하십시오. 그것이 개인 또는 내부 접근성 이었다면, 나는 그것으로 도망 가라고 말할 것입니다. 그러나 공공 상수는 중력 상수 나 WM_BLAH 기호와 같은 진정한 가치가 아니라면 의심 스럽습니다. – Josh

0

코드 가독성의 관점에서 볼 때 나는 두 번째 개선점을 발견했습니다. 컴파일러가 그 상황에서 최적화 할만큼 똑똑한 지 확실하지 않지만 히트가 무시할 정도라면 나는 단지 가독성과 함께 갈 것이다.

1

상수는 ... 상수이기 때문에 값은 절대로 변경되지 않습니다.

속성에 대한 기본 설정은 필드 및 속성의 서명이 다른 것입니다. 필드에서 속성으로 변경하면 모든 호출자가 다시 컴파일되어야합니다. 따라서 첫 번째 인스턴스에서 속성을 만들면 나중에 getter/setter 논리를 추가해야하는 경우 해당 문제가 방지됩니다.

변경되지 않는 상수가 있으므로 속성으로 구현할 이유가 없습니다. readonly static을 정의했지만 클래스 내에서만 변경할 수 있으므로 외부에서 상수와 차이가 없습니다.