왜 "공개 정적 const 문자열 s ="스테이트 "; 내 수업에서는 가질 수 없습니까?

StackOverflow https://stackoverflow.com/questions/408192

  •  03-07-2019
  •  | 
  •  

문제

수업을 컴파일하려고 할 때 오류가 발생합니다.

상수 'NamespaceName.ClassName.CONST_NAME' 정적으로 표시 될 수 없습니다.

라인에서 :

public static const string CONST_NAME = "blah";

나는 항상 Java에서 이것을 할 수있었습니다. 내가 뭘 잘못하고 있죠? 그리고 왜 내가 이것을 할 수 없습니까?

도움이 되었습니까?

해결책

const 물체는 항상입니다 static.

다른 팁

로부터 C# 언어 사양 (PDF Page 287- 또는 PDF의 300 번째 페이지) :

상수가 정적 부재로 간주 되더라도 일정한 선언은 정적 수정자를 필요로하거나 허용하지 않습니다.

const 멤버는 컴파일러에 의해 정적으로 간주 될뿐만 아니라 상수 값 의미를 암시합니다. 이는 상수에 대한 참조가 멤버에 대한 참조 대신 상수 멤버의 값으로 사용 코드로 컴파일 될 수 있음을 의미합니다.

다시 말해, 값 10을 포함하는 const 멤버는 Const 멤버에 대한 참조 대신 숫자 10으로 사용하는 코드로 컴파일 될 수 있습니다.

이것은 정적 리디 폰리 필드와 다르며, 항상 필드에 대한 참조로 컴파일됩니다.

이것은 사전 제트입니다. JIT'ter가 작용할 때이 두 가지를 대상 코드로 값으로 컴파일 할 수 있습니다.

C#'s const Java와 똑같은 것입니다 final, 그것은 항상 항상입니다 static. 제 생각에는 실제로는 필요하지 않습니다. const 비가 아닌 변수static, 그러나 당신이 액세스해야한다면 a 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 필드는 컴파일 타임 상수입니다, Readonly 필드는 런타임 상수에 사용될 수 있습니다 ...

따라서 const 필드에서 정적을 사용하는 것은 c/c ++에서 정의 (#define 포함) 정적을 만들려고하는 것과 같습니다 ... 물론 컴파일 타임에서 값으로 대체되므로 모든 인스턴스에 대해 한 번 시작됩니다 (= static). .

Const는 정적과 유사합니다. 클래스 이름을 가진 가변성에 액세스 할 수 있지만 Diff는 정적 변수를 수정할 수 있으며 Const는 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top