문제

왜 C#허용하지 않 const 및 정적에서 동일한가?Java 선언해야 합니다 필드로'정전'과'최종'으로 행동한다.왜 C#못하게 선언할 const 의 최종?

나는 더 구분에 Java,모든 인터페이스가 공공 및 추상적이 있는지 여부를 명시적으로 또는 선언하지 않습니다.지 않 const 의 효과적으로 정적에서 자연?왜 C#발크에서 이?

도움이 되었습니까?

해결책

conststatic 정말로 다른 것을 의미,다른 저장 메커니즘,서로 다른 초기화. static 은 읽기/쓰기,따라서 있어야 할당된 메모리 저장을위와 초기화해야 합니다.A static 수 초기화과 리터럴 가치 또는 식입니다.반면에, const 은 변경할 수 없어야 합 초기화과 컴파일 시간 상수 (일반적으로 리터럴 가치,또 표현할 수 있는 완전히 평가에서 컴파일 시간).이 값은 컴파일할 때 알려진 될 수 있도록 직접 포함 생성된 코드에서는,따라서 저장할 필요가 없을 할당될 수 있습니다.

다른 팁

성격에 의한 상수 ~이다 정적이므로 중복됩니다.

앞에서 말했듯이 정적 결승 Java에서는 동일합니다 정적으로 읽기 C#에서. 실제로, 당신은이 멤버가 정적이며 그 내용을 변경할 수 없다고 말합니다. 또한 두 경우 모두 정적 생성자의 값을 지정할 수 있습니다.

하지만 Const C#에서는 완전히 다릅니다. C의 상수 선을 더 많이 따라정의하다 지시 사항) 그러나 OOP를 염두에두고 있습니다. 일정하기 때문에 정적입니다. 모든 인스턴스는 동일한 값으로 상수를 갖고 생성자를 설정할 수 없습니다. 또한 인스턴스를 만들 필요없이 누군가가 상수에 액세스하고 싶을 수도 있습니다. 당신이 그것에 대해 생각할 때 비 정적 상수는 말이되지 않습니다. 상수는 객체의 일부가 아니라고 말할 수 있습니다. 그들은 단지 그것을 사용하여 컨텍스트, 강한 이름을 제공합니다.

Java는 동등하지 않습니다 Const. 당신은 그 어딘가에 읽을 수 있습니다 정적 결승 동일합니다 정의하다 그러나 그것은 너무 모호합니다. 완전히 다른 메커니즘, 공통점은 없지만 최종 결과에서 코드의 결과는 동일합니다. 코드의 유지 관리 가능성과 가독성이 향상됩니다.

C#의 상수에 대한 생각을 정적 멤버로 생각하지 않아야합니다. 그것들을 OOP 버전으로 생각하십시오 정의하다. 캡슐화를 고려할 때만 이유만을 고려할 때 결정적인 그리고 준비 적 필드는 자신의 코드가 실수로 값을 변경하는 것을 방지하는 것입니다. 그리고 그것은 나에게 일정하게 들리지 않습니다.

수메리 :

  • Final = Readonly
  • 정적 최종 = 정적 판독 값
  • N/A = Const

a 씨# Const 암시합니다 공전 그러나 C#은 Java의 것과 동일합니다. 결정적인 키워드의 키워드 준비 적.

따라서 실제로 C#을 허용합니다 Const Final, 그것은이다 정적으로 읽기 C#에서.

고유 한 수정자를 허용하고 요구하지 않으면 혼란을 유발할 수 있기 때문입니다. 네가 본다면

static const int A = 3
const int B = 5

당신은 그것들이 2 가지 다른 상수라고 믿을 수 있습니다.
VB 2008조차도 (원하는 경우 매우 장황 할 수 있음)는 허용하지 않습니다.

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