2010-03-25 6 views
5

Supongamos lo siguiente: tenemos la clase B, que es una clase privada anidada dentro de la clase A. No hay ninguna clase heredando de la clase B. La pregunta es: ¿el compilador automáticamente marcará la clase B como Sellada? (no heredable en VB). ¿Hay alguna buena razón para que el compilador no marque la clase B como sellada?¿Las clases privadas se sellan en la compilación?

Mi línea de pensamiento es la siguiente: dado que la clase B está anidada dentro de la clase A y es privada, y no hay otra clase heredando de la clase B, debería ser seguro sellarla, porque no puede heredarse fuera clase A (ni siquiera por subclases de A).

Class A 
    Private Class B 
    End Class 
End Class 

Respuesta

7

El compilador no marcará automáticamente este tipo como sellado.

Es cierto que en este escenario muy específico no hay un valor real al dejar la clase como no sellada. Sin embargo, determinar que estás en este escenario no siempre es tan fácil. Usted tiene que considerar lo siguiente

  • El tipo es privado
  • debe tener en cuenta la presencia de las clases parciales
  • Otros tipos anidados privados podían heredar.

No son imposibles de calcular, pero tampoco son triviales. Es mucho más barato pedirle al usuario que simplemente selle el tipo ellos mismos

1

No revisé, pero supongo que no servirá. En cualquier caso, el JIT puede determinar si una clase puede tener descendientes o no, de modo que no espero ninguna diferencia en el tiempo de ejecución.

+0

El JIT puede determinar si una clase tiene descendientes pero no creo que lo haga fuera de la presencia del bit sellado en un tipo. No tengo ninguna referencia para respaldarme en esto, pero estoy bastante seguro sobre este punto. – JaredPar

+0

@JaredPar, por lo que sé, muchas máquinas virtuales Java han estado haciendo esto durante mucho tiempo (lo cual es realmente necesario debido al método virtual predeterminado - http://www.ibm.com/developerworks/library/j- jtp12214 /), y estoy bastante seguro de que MS hace tales optimizaciones si se ha visto que ayudan al rendimiento. – Lucero

+0

@Lucero el JIT definitivamente lo hace para las clases explícitamente selladas. Pero solo hay un subconjunto muy pequeño de casos donde puede hacerlo para clases no selladas. No estoy seguro de si esa micro-optimización valdría la pena. Pero como dije, no puedo encontrar ningún documento de una manera u otra. – JaredPar

Cuestiones relacionadas