密封级性能

时间:2013-03-17 05:45:34

标签: c# performance

我读到了sealed类,并且知道密封的类不能被继承。

如果我不需要从密封类中继承,我用密封装饰类,我会获得更多性能吗?

// cs_sealed_keyword.cs
// Sealed classes
using System;
sealed class MyClass 
{
   public int x; 
   public int y;
}

class MainClass 
{
   public static void Main() 
   {
      MyClass mC = new MyClass(); 
      mC.x = 110;
      mC.y = 150;
      Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y); 
   }
}

2 个答案:

答案 0 :(得分:2)

曾几何时,在OO的早期阶段,非虚拟方法通过避免vtable访问而提供了显着的性能优势。然而,如今,sealed修饰符背后的基本原理更多是关于设计选择,控制客户端代码与库的交互方式。

正如标记方法private允许您保留实现细节以供将来改进一样,标记类sealed可以保证(禁止阴影反射恶作剧)库的用户将无法使用通过不明智的子类化实现,以意想不到的,可能是灾难性的方式将他们的代码插入到调用图中。

这在安全情况下尤其重要,在这种情况下,一个严格控制的类结构可以被一个内部子类完全撤消。因此,您将在System.Security命名空间中找到大量密封类。

答案 1 :(得分:0)

使用密封改性剂时,性能改善很小。编译器在最低级别进行微优化。

JIT编译器可以通过调用非虚拟方法

来生成更高效的代码

另请查看此Thread