2013-03-17 60 views
2

我读了关于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); 
    } 
} 
+1

看来Seamed类与性能关系不大。 – David 2013-03-17 05:48:29

回答

4

很久产生更有效的代码,在OO的初期,非虚拟方法提供显着的通过避免vtable访问来获得性能优势。然而,现在,sealed修饰符背后的原理更多地是关于设计选择,控制客户端代码与库的交互方式。

正如标记的方法private让你保留实施细则为未来的改善,标志着一类sealed给你一个保证(除非黑幕反射有心计)库的用户将不能够干预他们的代码到您的通话以意想不到的方式绘制图表,可能会通过不明智地对您的实现进行子类化来造成灾难性后果

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

2

使用密封调节器时性能改善很小。编译器在最低级别执行微型优化。

JIT编译器可通过调用该方法的非几乎

而且一旦检查出这个Thread