C#中的sealed修饰符的作用详解

 更新时间:2025年11月14日 14:37:14   作者:Charles_go  
在 C# 中,sealed 修饰符的作用是 “密封”用来阻止类被继承,或者阻止方法/属性在派生类中被重写,接下来通过本文给大家介绍C#中的sealed修饰符的作用详解,感兴趣的朋友一起看看吧

在 C# 中,sealed 修饰符的作用是 “密封” —— 用来阻止类被继承,或者阻止方法/属性在派生类中被重写

✅ 1.sealed用于类(class)

作用:

  • 禁止其他类继承这个类
  • 如果尝试继承一个 sealed 类,编译器会报错。

示例:

public sealed class FinalClass
{
    public void DoWork() { }
}
// ❌ 编译错误!不能继承 sealed 类
public class DerivedClass : FinalClass 
{
}

💡 常见用途:

  • 设计上不希望被扩展的类(如工具类、值对象)
  • 提高性能(JIT 编译器对 sealed 类有优化)
  • .NET 中很多内置类型是 sealed 的,比如 stringDateTime

✅ 2.sealed用于方法或属性(必须与 override 一起用)

作用:

  • 允许当前类继承并重写父类的虚成员(virtualabstract),
    但禁止它的子类再进一步重写这个成员

示例:

public class Base
{
    public virtual void Say() => Console.WriteLine("Base");
}
public class Middle : Base
{
    // 重写 Say,并密封它
    public sealed override void Say() => Console.WriteLine("Middle (sealed)");
}
public class Child : Middle
{
    // ❌ 编译错误!Say() 已被 sealed,不能再重写
    // public override void Say() { }
}

🔔 注意:

  • sealed 修饰方法时,必须同时使用 override
  • 不能直接对非虚方法加 sealed

📌 为什么使用sealed?

场景原因
防止滥用继承有些类设计为“最终版本”,不希望被随意扩展
安全性避免子类破坏原有逻辑(尤其在库开发中)
性能优化JIT 编译器可以对 sealed 类做内联等优化
明确设计意图表达“这个类到此为止”的语义

⚠️ 常见误区

错误:以为 sealed 类不能有虚方法
正解sealed可以有虚方法,但它自己不能被继承,所以这些虚方法实际上也无法被重写(因为没子类)。

错误sealed 方法可以单独使用
正解sealed 方法必须搭配 override,不能单独修饰一个普通方法。

✅ 小结

用法含义
sealed class MyClass该类不能被继承
sealed override void MyMethod()该方法在当前类是最终版本,子类不能再重写

💡 记住口诀:“sealed = 到此为止,不准再改”

如果你正在设计一个工具类(比如 MathHelper),并且确定不需要继承,就可以把它声明为 sealed

public sealed class MathHelper
{
    public static int Add(int a, int b) => a + b;
    // 没有实例成员,也不需要继承 → 用 sealed 很合适
}

问题

如何防止类被继承?或者让类继承但是防止其某些方法被重写?

使用sealed修饰符

到此这篇关于C#中的sealed修饰符的作用详解的文章就介绍到这了,更多相关c# sealed修饰符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解C# 代码占用的空间

    详解C# 代码占用的空间

    这篇文章主要介绍了C# 代码占用的空间的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • C#代码实现将PDF转换为PostScript(PS)格式

    C#代码实现将PDF转换为PostScript(PS)格式

    PostScript 是由 Adobe Systems 在 20 世纪 80 年代开发的一种页面描述语言,本文将介绍如何使用 Spire.PDF for .NET 以编程方式将 PDF 文件转换为 PostScript(PS)文件,有需要的小伙伴可以了解下
    2026-03-03
  • 如何在Unity中检测死循环和卡死

    如何在Unity中检测死循环和卡死

    这篇文章主要介绍了在Unity中检测死循环和卡死的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 如何通过IL了解C#类的构造函数浅析

    如何通过IL了解C#类的构造函数浅析

    这篇文章主要给大家介绍了关于如何通过IL了解C#类的构造函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • c#使用ManagedWifi查看当前Wifi信号并选择wifi的示例

    c#使用ManagedWifi查看当前Wifi信号并选择wifi的示例

    这篇文章主要介绍了c#使用ManagedWifi查看当前Wifi信号并选择wifi的示例,需要的朋友可以参考下
    2014-04-04
  • C#获取真实IP地址(IP转为长整形、判断是否内网IP的方法)

    C#获取真实IP地址(IP转为长整形、判断是否内网IP的方法)

    这篇文章主要介绍了C#获取真实IP地址的实现代码,包含把IP转为长整形、判断是否是私网、内网IP的方法,需要的朋友可以参考下
    2014-08-08
  • C# winform 请求http的实现(get,post)

    C# winform 请求http的实现(get,post)

    本文主要介绍了C# winform 请求http的实现(get,post),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Unity实现UI光晕效果(发光效果)

    Unity实现UI光晕效果(发光效果)

    这篇文章主要为大家详细介绍了Unity实现UI光晕效果,发光效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • C#虚方法的声明和使用实例教程

    C#虚方法的声明和使用实例教程

    这篇文章主要介绍了C#虚方法的声明和使用实例教程,对于初学者理解C#的虚方法有一定的帮助,需要的朋友可以参考下
    2014-07-07
  • WinForm实现多屏交互的实战技巧和避坑指南

    WinForm实现多屏交互的实战技巧和避坑指南

    你是否遇到过这些问题窗体显示在错误的屏幕、窗口位置被任务栏遮挡或者跨屏拖拽卡顿,本文将通过 3步核心流程、5大实战技巧和10个高频避坑指南,教你彻底掌握WinForm多屏交互开发,让窗体精准飞向副屏,需要的朋友可以参考下
    2025-09-09

最新评论