开发者

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

开发者 https://www.devze.com 2025-11-15 10:32 出处:网络 作者: Charles_go
目录✅ 1.sealed用于类(class)作用:示例:✅ 2.sealed用于方法或属性(必须与 override 一起用)作用:示例: 为什么使用sealed?⚠️ 常见误区✅ 小结在 C# 中,sealed 修饰符的作用是 “密封” www.d
目录
  • ✅ 1.sealed用于类(class)
    • 作用:
    • 示例:
  • ✅ 2.sealed用于方法或属性(必须与 override 一起用)
    • 作用:
    • 示例:
  • 为什么使用sealed?
    • ⚠️ 常见误区
      • ✅ 小结

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

        ✅ 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 Sayandroid() => 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修饰符内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相javascript关文章希望大家以后多多支持编程客栈(www.devze.com)!

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号