Nehmen wir Folgendes an: Wir haben Klasse B, eine private Klasse, die in Klasse A verschachtelt ist. Es gibt keine Klasse, die von Klasse B erbt. Die Frage ist: wird der Compiler automatisch Klasse B als Sealed markieren? (NonInheritable in VB). Gibt es einen guten Grund dafür, dass der Compiler die Klasse B nicht als versiegelt markiert?Werden private Klassen bei der Kompilierung versiegelt?
Mein Gedankengang ist dies: Da Klasse B innerhalb der Klasse A verschachtelt ist und privat ist und keine andere Klasse von Klasse B erbt, sollte es sicher sein, sie zu versiegeln, da sie nicht außerhalb vererbt werden kann Klasse A (nicht einmal von Unterklassen von A).
Class A
Private Class B
End Class
End Class
Das JIT kann feststellen, ob eine Klasse Nachkommen hat, aber ich glaube nicht, dass es außerhalb der Anwesenheit des versiegelten Bit auf einem Typ tut. Ich habe keine Referenzen, um mich zu unterstützen, aber ich bin ziemlich sicher in diesem Punkt. – JaredPar
@JaredPar, soweit ich weiß, tun dies schon viele Java VMs (was aufgrund der Default-Virtual-Methode wirklich notwendig ist - http://www.ibm.com/developerworks/library/j- jtp12214 /), und ich bin mir ziemlich sicher, dass MS solche Optimierungen durchführt, wenn sie als leistungsfördernd angesehen werden. – Lucero
@Lucero das JIT ist definitiv für explizit versiegelte Klassen. Aber es gibt nur eine sehr kleine Teilmenge von Fällen, in denen dies für nicht versiegelte Klassen möglich ist. Ich bin mir nicht sicher, ob sich diese Mikrooptimierung lohnt. Aber wie ich schon sagte, ich kann keine Dokumente auf die eine oder andere Weise finden. – JaredPar