2013-03-17 61 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