상수는 정적으로 표시 할 수 없습니다.
다음과 같이 PI 상수를 선언하려고합니다.
public static const double PI = Math.PI;
하지만 왜이 오류가 발생합니까?
The constant 'Calendar.NewCalendar.PI' cannot be marked static
const
암시합니다 static
( const
값 을 참조하는 데 인스턴스가 필요하지 않음 ).
또한이 중요한 점을 추가하고 싶습니다.를 사용하여 어셈블리에 링크 (참조)하면 public const
해당 값이 어셈블리에 복사 됩니다. 따라서 const
참조 된 어셈블리 의 값이 변경 되어도 어셈블리에는 원래 컴파일 된 값이 그대로 유지됩니다.
이 동작이 허용 되지 않는 경우 필드를 public static readonly
필드로 만드는 것을 고려해야 합니다.
바이너리로 제공되는 Lib.dll :
public class Foo {
public const int HATS = 42;
public static readonly int GLOVES = 33;
}
App.exe, Lib.dll 참조 :
Foo.HATS // This will always be 42 even if the value in Lib.dll changes,
// unless App.exe is recompiled.
Foo.GLOVES // This will always be the same as Foo.GLOVES in Lib.dll
에서 MSDN :
언제든지 변경 될 것으로 예상되는 정보를 나타내는 상수를 만들지 마십시오. 예를 들어 상수 필드를 사용하여 서비스 가격, 제품 버전 번호 또는 회사의 브랜드 이름을 저장하지 마십시오. 이러한 값은 시간이 지남에 따라 변경 될 수 있으며 컴파일러는 상수를 전파 하기 때문에 라이브러리로 컴파일 된 다른 코드를 다시 컴파일하여 변경 사항을 확인해야합니다.
에서 DotNetPerls :
DLL.
const
필드 또는 선언 을 사용할 때 C # 컴파일러는 실제로const
IL 코드에 직접 변수 값을 포함합니다. 따라서 본질적으로를const
별도의 엔티티로 지 웁니다 .주의 : 값이 변경된
const
후에 종속 된 프로그램을 다시 컴파일하지 않으면const
[ 이전 값을 계속 사용하므로 ] 이 중단 될 수 있습니다 .
상수는 정의상 정적입니다.
정적 const를 가질 수 없습니다. const 대신 readonly를 시도하거나 "const"가 어쨌든 정적을 암시하므로 "static"을 삭제하십시오.
런타임이 아닌 컴파일 중에 코드에서 상수를 바꿀 수 없으므로 정적 대 인스턴스 정의에 대한 요구 사항이 없습니다.
모든 상수 선언은 암시 적으로 정적이며 C # 사양에는 정적 한정자의 (중복) 포함이 금지되어 있다고 명시되어 있습니다. 나는 이것이 독자가 두 개의 상수를 볼 때 발생할 수있는 혼란을 피하기위한 것이라고 믿습니다. 하나는 정적으로 선언되고 다른 하나는 그렇지 않습니다. 그들은 사양의 차이가 의미의 차이를 암시한다고 쉽게 가정 할 수 있습니다. 즉, 선택이있는 기본 액세스 수정 자이기도 한 액세스 수정자를 중복 지정하는 것에 대한 금지는 없습니다. 예를 들어 (구체적인) 메소드는 기본값 임에도 불구하고 명시 적으로 비공개로 표시 될 수 있습니다. 규칙은 선택의 여지가없는 경우 (예 : 인터페이스의 메서드 선언) 중복 수정자는 금지되는 것 같습니다. 선택권이있는 곳에서는 허용됩니다.
참고 URL : https://stackoverflow.com/questions/13150343/the-constant-cannot-be-marked-static
'IT story' 카테고리의 다른 글
Java에서 다른 반환 유형으로 오버로드? (0) | 2020.09.04 |
---|---|
`sin`에 대한 정의되지 않은 참조 (0) | 2020.09.04 |
SQL Server 데이터베이스 복원 오류 : 지정된 캐스트가 유효하지 않습니다. (0) | 2020.09.04 |
다른 페이지의 부제목 또는 앵커에 상호 참조 추가 (0) | 2020.09.04 |
REST HATEOAS (성숙도 레벨 3)는 얼마나 유용하고 중요합니까? (0) | 2020.09.04 |