상수 클래스를 만드는 모범 사례 제안


25

Constants 클래스 선언에 대해 팀원간에 토론이 있습니다. 상수 변수를 아래와 같이 별도의 클래스로 옮기고 있습니다.

public class Constants
{
      public const string StateId = "ST";
      public const string CountryId = "CI";
}

일부 팀원은 재정의 옵션을 피하기 위해 클래스를 봉인 된 것으로 선언하고 Constant 클래스의 인스턴스 생성을 피하기 위해 정적으로 표시 할 것을 제안했습니다.
그러나 앞으로 필요할 때 읽기 전용 변수를 초기화하는 데 도움이되므로 정적 생성자로 Sealed로 사용하는 것을 선호합니다. 이에 대한 조언을 부탁드립니다.


어떤 것을 선택하든 객체와 "전역"유형 클래스 간의 종속성을 피하기 위해 상수 클래스 자체가 아닌 시스템에서 인터페이스를 사용하는 것이 좋습니다. ??
dreza

따라서 클래스를 정적으로 만들고 정적 생성자를 지금 또는 나중에 추가 해야하는지 묻는 것에 동의하십니까? 귀하의 질문에 반대 의견이 보이지 않습니다. 명확히하십시오.
Doc Brown


2
질문이 없습니다. 클래스에 인스턴스 멤버가 없으면이를 표시 할 수 있습니다 static. 이것은 정적 생성자의 유무와 완전히 직교합니다.
코드 InChaos

1
상수는 실제로 수학적으로 상수입니까, 아니면 구성의 형태입니까?
코드 InChaos

답변:


31

귀하의 질문이 무엇인지 완전히 명확하지는 않지만 값이 실제로 일정하다면 간단한 옵션에 문제가 없습니다.

    public static class LocationConstants
    {
        public const string StateId = "ST";
        public const string CountryId = "CI";
    }

static클래스 선언에서 사용하면 이 클래스의 목적에 대한 의도를 알 수 있습니다.

Marc Gravell 은이 스택 오버플로 답변 에서 상수와 관련된 잠재적 인 문제 중 일부를 설명 합니다. 코드베이스에 문제가 있는지 여부 만 알 수 있지만 값 변경 될 수있는 경우 public static readonly대신 대신 사용하십시오 const. 그렇지 않으면 상수를 참조하는 코드가 변경되면 값을 다시 작성해야합니다.


1
const 변수를 사용하여 찾을 수있는 경고 중 하나가 여기에 명확하게 설명되어 있습니다 . 코드베이스가 커지고 더 복잡 해지는 경향이 있기 때문에를 사용하지 않는 것이 좋습니다 const. 성능 향상은 일반적으로 향후 잠재적 인 문제의 위험을 감수 할 가치가 없습니다 (IMHO). public static readonly상수에 변수 를 사용하는 것을 선호합니다 .
joanlofe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.