当前位置: 首页 > ds >正文

C# 密封类和密封方法

        密封(sealed)是C#中用于限制继承和多态行为的关键字,它可以应用于类和方法,提供了一种控制继承层次的方式。

密封类

特点

  • 使用 sealed 关键字修饰的类
  • 密封类不能被其他类继承,但可以继承其他类或接口
  • 主要用于防止派生
  • 所有结构(struct)都是隐式密封的

使用场景

  1. 当类包含敏感信息或关键功能,不希望被修改时
  2. 当类是一个工具类或静态类(虽然静态类已经是隐式密封的)
  3. 出于性能考虑(运行时优化)
  4. 设计上不需要被继承的类

示例代码

public sealed class ConfigurationManager
{private static readonly ConfigurationManager instance = new ConfigurationManager();// 私有构造函数防止实例化private ConfigurationManager() { }public static ConfigurationManager Instance => instance;public string GetConfig(string key){// 实现配置获取逻辑return "ConfigValue";}
}// 尝试继承会编译错误
// public class CustomConfigManager : ConfigurationManager { } // 错误: 无法从密封类型继承

密封方法

特点

  • 只能用于重写基类虚方法的方法
  • 使用 sealed override 组合,sealed必须和override关键字在方法声明中一起使用
  • 密封方法不能在继承过程中被派生类重写,防止派生类进一步重写该方法
  • 可以密封单个方法而不密封整个类

使用场景

  1. 当方法的实现已经很完善,不希望子类修改时
  2. 当方法涉及关键业务逻辑,必须保持稳定时

示例代码

public class Animal
{public virtual void MakeSound(){Console.WriteLine("Animal makes a sound");}
}public class Dog : Animal
{// 密封此方法,防止进一步重写public sealed override void MakeSound(){Console.WriteLine("Bark bark!");}
}public class GoldenRetriever : Dog
{// 尝试重写会编译错误// public override void MakeSound() { } // 错误: 无法重写继承成员,因为它是密封的// 可以隐藏基类方法(但不推荐)public new void MakeSound(){Console.WriteLine("Quiet bark...");}
}// 使用
Animal dog = new GoldenRetriever();
dog.MakeSound(); // 输出: Bark bark! (因为隐藏方法不会影响多态行为)

密封类与密封方法的比较

特性

密封类

密封方法

关键字

sealed class

sealed override

作用对象

整个类

单个方法

主要目的

防止类被继承

防止方法被进一步重写

使用场景

工具类、单例、安全关键类

关键方法、稳定实现的方法

继承影响

完全阻止继承

只阻止特定方法的重写

实际应用建议

  1. 谨慎使用密封:除非有明确理由,否则不要轻易密封类或方法,这会限制代码的扩展性
  2. 框架设计:在开发供他人使用的库或框架时,密封可以作为一种设计约束
  3. 性能考虑:密封类和密封方法有时可以帮助JIT编译器进行优化
  4. 安全考虑:防止关键类被恶意派生或关键方法被篡改

.NET框架中许多类都是密封的,如StringMath等,这是因为它们的功能已经非常完善且稳定,不需要扩展。

http://www.xdnf.cn/news/10403.html

相关文章:

  • simulink mask、sfunction和tlc的联动、接口
  • CSS专题之层叠上下文
  • 小明的Java面试奇遇之:支付平台高并发交易系统设计与优化[特殊字符]
  • [SC]SystemC在CPU/GPU验证中的应用(三)
  • 【2025年软考中级】第二章 2.1 程序设计语言的基本概念
  • 【C语言】讲解 程序分配的区域(新手)
  • 论文笔记: Urban Region Embedding via Multi-View Contrastive Prediction
  • C#数字图像处理(一)
  • 【Hot 100】55. 跳跃游戏
  • Unity3D仿星露谷物语开发57之保存库存信息到文件
  • ROS2与Unitree机器人集成指南
  • Linux 基础IO(上)
  • javaweb-maven以及http协议
  • (LeetCode 每日一题) 909. 蛇梯棋 (广度优先搜索bfs)
  • 电子电器架构 --- OTA测试用例分析(上)
  • 华为OD机试_2025 B卷_小明减肥(Python,100分)(附详细解题思路)
  • 最卸载器——Geek Uninstaller 使用指南
  • 设备健康管理的战略升维:用预测性维护重构企业竞争力
  • JDK21深度解密 Day 9:响应式编程模型重构
  • 性能优化 - 理论篇:CPU、内存、I/O诊断手段
  • 性能优化 - 理论篇:常见指标及切入点
  • 钉钉红包性能优化之路
  • Git入门到精通:30分钟掌握核心技巧
  • 第二章支线三 ·《CSS炼金术:动画与变换高级奥义》
  • C++文件和流基础
  • [蓝桥杯]春晚魔术【算法赛】
  • Socket编程之TCP套件字
  • 深 入 剖 析 单 链 表:从 原 理 到 实 战 应 用
  • day17 常见聚类算法
  • Linux 库制作与原理