클래스에“public static const string S =”stuff”를 사용할 수없는 이유는 무엇입니까?
내 클래스를 컴파일하려고 할 때 오류가 발생합니다.
상수
'NamespaceName.ClassName.CONST_NAME'
는 정적으로 표시 될 수 없습니다.
라인에서 :
public static const string CONST_NAME = "blah";
Java로 항상이 작업을 수행 할 수 있습니다. 내가 도대체 뭘 잘못하고있는 겁니까? 그리고 왜 내가 이것을하지 못하게합니까?
const
객체는 항상 static
.
로부터 C # 언어 사양 (PDF 페이지 287 - 또는 PDF의 300 페이지)
상수는 정적 멤버로 간주되지만 상수 선언은 정적 수정자를 요구하거나 허용하지 않습니다.
const 멤버는 상수 값 의미를 암시 할뿐만 아니라 컴파일러에 의해 정적으로 간주됩니다. 이는 상수에 대한 참조가 멤버에 대한 참조 대신 상수 멤버의 값으로 사용 코드로 컴파일 될 수 있음을 의미합니다.
즉, 값 10을 포함하는 const 멤버는 const 멤버에 대한 참조 대신 숫자 10으로 사용하는 코드로 컴파일 될 수 있습니다.
이 필드는 정적 읽기 전용 필드와 다르며 항상 필드에 대한 참조로 컴파일됩니다.
이것은 JIT 이전입니다. JIT'ter가 작동하면 둘 다 대상 코드에 값으로 컴파일 될 수 있습니다.
C # const
은 final
항상 항상을 제외하고 Java와 똑같습니다 static
. 제 생각에는 const
변수가 아닌 것이 아닌 static
것은 아니지만 const
변수가 아닌 변수 에 액세스 해야하는 경우 static
다음을 수행 할 수 있습니다.
class MyClass
{
private const int myLowercase_Private_Const_Int = 0;
public const int MyUppercase_Public_Const_Int = 0;
/*
You can have the `private const int` lowercase
and the `public int` Uppercase:
*/
public int MyLowercase_Private_Const_Int
{
get
{
return MyClass.myLowercase_Private_Const_Int;
}
}
/*
Or you can have the `public const int` uppercase
and the `public int` slighly altered
(i.e. an underscore preceding the name):
*/
public int _MyUppercase_Public_Const_Int
{
get
{
return MyClass.MyUppercase_Public_Const_Int;
}
}
/*
Or you can have the `public const int` uppercase
and get the `public int` with a 'Get' method:
*/
public int Get_MyUppercase_Public_Const_Int()
{
return MyClass.MyUppercase_Public_Const_Int;
}
}
글쎄, 이제 나는이 질문이 4 년 전에 요청되었다는 것을 알고 있지만, 약 2 시간의 작업을 해왔고 모든 종류의 다양한 응답 및 코드 형식을 시도 하여이 답변에 시도했지만 여전히 게시하고 있습니다. :)
그러나 기록상, 나는 여전히 바보 같은 느낌이 든다.
MSDN에서 : http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx
... 또한 const 필드는 컴파일 타임 상수 이지만 읽기 전용 필드는 런타임 상수에 사용할 수 있습니다 ...
따라서 const 필드에서 static을 사용하는 것은 C / C ++에서 정의 된 (#define으로) static을 만드는 것과 같습니다. 컴파일 타임의 값으로 바뀌므로 모든 인스턴스에 대해 한 번 시작됩니다 (= static) .
const는 static과 비슷하지만 클래스 이름으로 두 변수에 모두 액세스 할 수 있지만 diff는 정적 변수를 수정할 수 있고 const는 수정할 수 없습니다.
'Programing' 카테고리의 다른 글
jQuery로 요소 유형 가져 오기 (0) | 2020.03.18 |
---|---|
numpy 배열에서 가장 가까운 값 찾기 (0) | 2020.03.18 |
setInterval 함수를 처음 지연없이 실행 (0) | 2020.03.18 |
R에서 trycatch를 작성하는 방법 (0) | 2020.03.18 |
파이썬에서 문자열에서 영숫자를 제외한 모든 것을 제거 (0) | 2020.03.18 |