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#实现将浮点数表示的货币数量以汉字大写形式输出的方法,涉及C#针对浮点数的遍历与字符替换操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#控制键盘按键的常用方法

    C#控制键盘按键的常用方法

    这篇文章主要介绍了C#控制键盘按键的常用方法,涉及C#针对键盘大写、滚动、数字的开启与锁定等功能,非常简单实用,需要的朋友可以参考下
    2015-05-05
  • C#泛型语法详解

    C#泛型语法详解

    本文详细讲解了C#中的泛型语法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • C# TreeView无限目录树实现方法

    C# TreeView无限目录树实现方法

    这篇文章主要介绍了C# TreeView无限目录树实现方法,实例分析了TreeView节点操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • C#排序算法之堆排序

    C#排序算法之堆排序

    这篇文章主要为大家详细介绍了C#排序算法之堆排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • C#中的out关键字用法详解

    C#中的out关键字用法详解

    在 C# 中,out 关键字是一个修饰符,它允许你在方法内部创建一个临时的变量,用于接收传递进来的参数值,并在方法执行完毕后,将该变量的值返回给调用方法的对象,本文将给大家详细介绍一下C#中的out关键字用法,需要的朋友可以参考下
    2024-02-02
  • unity 鼠标移入弹出UI的操作

    unity 鼠标移入弹出UI的操作

    这篇文章主要介绍了unity 鼠标移入弹出UI的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • C#实现功能强大的中国农历日历操作类

    C#实现功能强大的中国农历日历操作类

    这篇文章主要介绍了C#实现功能强大的中国农历日历操作类,实例分析了C#操作时间及字符串的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • C# Winform消息通知之系统本地通知local toast notification

    C# Winform消息通知之系统本地通知local toast notification

    这篇文章主要为大家介绍了C# Winform消息通知之系统本地通知local toast notification使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • C#获取文件创建时间的方法

    C#获取文件创建时间的方法

    这篇文章主要介绍了C#获取文件创建时间的方法,涉及C#文件操作的技巧及CreattionTime属性的使用方法,需要的朋友可以参考下
    2015-04-04

最新评论