C# sealed关键字的作用 - 防止类被继承和方法被重写

sealed关键字用于限制类继承或方法重写:修饰类时禁止继承,修饰重写方法时禁止进一步重写;适用于最终实现类、最优方法实现及安全敏感场景。

sealed 关键字在 C# 中用于限制类的继承或方法的重写,增强代码的安全性和设计意图的表达。它可以直接修饰类或虚方法,具体作用根据使用位置不同而有所区别。

防止类被继承

sealed 修饰一个类时,该类不能被其他类继承。试图继承 sealed 类会导致编译错误。这在你希望某个类的设计保持不变、不希望被扩展时非常有用,比如一些工具类或安全敏感类。
  • 示例:
sealed class UtilityClass
{
    public void DoWork()
    {
        // 实现逻辑
    }
}

// 下面这行代码会引发编译错误: // class Derived : UtilityClass { } // 错误:无法继承 sealed 类

防止方法被重写

sealedoverride 一起使用时,它可以密封一个重写的方法,使其在派生类中不能再被进一步重写。这种用法通常出现在类的继承链中,用于“终止”某个虚方法的多态传播。
  • 示例:
class BaseClass
{
    public virtual void Show()
    {
        Console.WriteLine("BaseClass.Show");
    }
}

class DerivedClass : BaseClass { public sealed override void Show() { Console.WriteLine("DerivedClass.Show"); } }

class FinalClass : DerivedClass { // 下面这行代码会引发编译错误: // public override void Show() { } // 错误:无法重写 sealed 方法 }

使用场景建议

使用 sealed 可以明确表达设计意图,避免意外的继承和重写,提升性能(JIT 编译器可能对 sealed 类做更多优化),并增强安全性。但也要注意,过度使用会降低代码的可扩展性,应根据实际需求权衡。
  • 适合使用 sealed 的情况:
  • 类是最终实现,不需要也不允许被扩展
  • 重写的方法已经是最优实现,不应再被修改
  • 出于安全考虑,防止恶意继承篡改行为

基本上就这些。sealed 关键字虽小,但在控制继承结构上作用明显。