我读到了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);
}
}
答案 0 :(得分:2)
曾几何时,在OO的早期阶段,非虚拟方法通过避免vtable访问而提供了显着的性能优势。然而,如今,sealed
修饰符背后的基本原理更多是关于设计选择,控制客户端代码与库的交互方式。
正如标记方法private
允许您保留实现细节以供将来改进一样,标记类sealed
可以保证(禁止阴影反射恶作剧)库的用户将无法使用通过不明智的子类化实现,以意想不到的,可能是灾难性的方式将他们的代码插入到调用图中。
这在安全情况下尤其重要,在这种情况下,一个严格控制的类结构可以被一个内部子类完全撤消。因此,您将在System.Security命名空间中找到大量密封类。
答案 1 :(得分:0)