2

我阅读了有关密封类的信息,并且知道密封类不能被继承。

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

// 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); 
   }
}
4

2 回答 2

2

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

就像标记一个方法private可以让您保留实现细节以供将来改进一样,标记一个类sealed可以保证(除非有阴暗的反射恶作剧)您的库的用户将无法将他们的代码插入到您的调用图中以发生意外,可能是灾难性的通过不明智地将您的实现子类化的方式。

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

于 2013-03-17T06:36:21.290 回答
0

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

JIT 编译器可以通过非虚拟方式调用方法来生成更高效的代码

也看看这个线程

于 2013-03-17T05:52:58.353 回答