私人课程是否在编制时被封存?

时间:2010-03-25 19:44:31

标签: .net optimization compilation cil sealed

假设如下:我们有B类,它是嵌套在A类中的私有类。没有任何继承自B类的类。问题是:编译器会自动将B类标记为Sealed吗? (在VB中不可插入)。编译器是否有任何理由不将B类标记为密封?

我的想法是这样的:因为B类嵌套在A类中并且是私有的,并且没有其他类继承自B类,所以它应该是安全的,因为它不能在类外继承A(甚至不是A的子类)。

Class A
    Private Class B  
    End Class
End Class

2 个答案:

答案 0 :(得分:7)

编译器不会自动将此类型标记为已密封。

在这个非常具体的场景中,没有真正的价值可以让班级保持开启状态。但是,确定您处于这种情况并不总是那么容易。你必须考虑以下

  • 类型为私有
  • 必须考虑部分类的存在
  • 其他私有嵌套类型可以继承。

这些并非不可能计算,但它也不是微不足道的。要求用户自己密封类型要便宜得多

答案 1 :(得分:1)

我没有检查,但我想它不会那样做。无论如何,JIT可以确定一个类是否可以有后代,所以我不希望在运行时有任何差异。