C#中的sealed修饰符的作用详解
作者: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的,比如string、DateTime
✅ 2.sealed用于方法或属性(必须与 override 一起用)
作用:
- 允许当前类继承并重写父类的虚成员(
virtual或abstract),
但禁止它的子类再进一步重写这个成员。
示例:
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修饰符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
