当前位置: 代码网 > it编程>编程语言>Asp.net > C#中的sealed修饰符的作用详解

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

2025年11月14日 Asp.net 我要评论
在 c# 中,sealed 修饰符的作用是 “密封” —— 用来阻止类被继承,或者阻止方法/属性在派生类中被重写。✅ 1.sealed用于类(class

在 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修饰符内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com