2010-03-25 3 views
5

다음과 같이 가정합니다. 우리는 클래스 A 내에 중첩 된 개인 클래스 인 클래스 B를가집니다. 클래스 B로부터 상속하는 클래스가 없습니다. 질문 : 컴파일러가 클래스 B를 봉인으로 자동 표시합니까? (VB에서는 상속 불가) 컴파일러가 봉인 된 클래스 B를 표시하지 않는 이유가 있습니까?컴파일시 개인 클래스가 봉인됩니까?

내 생각은 클래스 B가 클래스 A 안에 중첩되어 있고 클래스 B에서 상속하는 다른 클래스가 없으므로 클래스를 상속 할 수 없으므로 봉인하는 것이 안전해야합니다. 클래스 A (A의 서브 클래스조차도 아님).

Class A 
    Private Class B 
    End Class 
End Class 

답변

7

컴파일러는 자동으로이 유형을 봉인으로 표시하지 않습니다.

사실 매우 구체적인 시나리오에서 클래스를 개봉하지 않은 채로 남겨 두는 데 실질적인 가치는 없습니다. 그러나이 시나리오에 있다고 판단하는 것이 항상 쉬운 것은 아닙니다. 다음

  • 유형은
  • 기타 개인 중첩 된 유형의 상속 수있는 부분 클래스의 존재를 고려해야합니다
  • 개인 고려해야합니다.

이들은 계산하기가 불가능하지 만 사소하지는 않습니다. 사용자에게 유형을 봉인하라고 사용자에게 묻는 것이 훨씬 저렴합니다.

1

나는 확인하지 않았다. 그러나 나는 그렇게하지 않을 것이라고 생각한다. 어떤 방법 으로든 JIT는 클래스가 하위 클래스를 가질 수 있는지 여부를 결정할 수 있으므로 런타임에 어떤 차이도 기대하지 않습니다.

+0

JIT는 클래스에 하위 클래스가 있는지 판단 할 수 있지만 유형의 봉인 된 비트가 있는지 확인하지 않습니다. 나는 이것을 뒷받침 할만한 언급이 없지만이 점에 대해서는 상당히 확신한다. – JaredPar

+0

@ JaredPar, 많은 Java VM이 오랫동안이 작업을 수행했다는 것을 알고있는 한 (이는 기본 가상 메소드 (http://www.ibm.com/developerworks/library/j-java/) jtp12214 /), 그리고 나는 MS가 성능을 돕는 것으로 여겨지는 경우 그러한 최적화를 수행한다고 확신한다. – Lucero

+0

@Lucero JIT는 명확하게 봉인 된 클래스를위한 것입니다. 그러나 봉인되지 않은 클래스에서 그렇게 할 수있는 부분 집합은 매우 적습니다. 마이크로 최적화가 그만한 가치가 있는지 확신 할 수 없습니다. 하지만 내가 말했듯이, 나는 어떤 문서도 찾을 수 없다. – JaredPar