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

C# 中抽象类、密封类、静态类和接口的区别

 在 C# 中,抽象类、密封类、静态类和接口是四种具有不同设计目的和特性的类型结构,它们在继承关系、实例化能力和使用场景上有显著区别:

核心概念

  • 抽象类(Abstract Class):用abstract修饰,不能直接实例化,需通过派生类实现。可包含抽象成员(必须在派生类中实现)和具体实现的成员,作为相关类的基类,提取公共逻辑并强制子类实现特定方法。

  • 密封类(Sealed Class):用sealed修饰,可实例化但禁止被继承,确保类的实现不被修改。仅包含非抽象成员,适用于功能完善且无需扩展的类。

  • 静态类(Static Class):用static修饰,不能实例化也不能被继承,仅包含静态成员(方法、字段等)。主要用于提供工具方法或全局功能,如Math类。

  • 接口(Interface):用interface定义,不能实例化,仅包含成员声明(C# 8.0 + 支持默认方法)。类或结构可实现多个接口,强制实现类遵循统一规范,是实现多态和松耦合的核心机制。

特性与使用对比

特性抽象类(Abstract Class)密封类(Sealed Class)静态类(Static Class)接口(Interface)
实例化不能直接实例化(需派生类)可以实例化不能实例化不能实例化
继承性可被继承,派生类需实现抽象成员不能被继承不能被继承可被类 / 结构实现,类可多实现
成员类型抽象成员 + 具体成员仅非抽象成员仅静态成员成员声明(可含默认方法)
构造函数有(供派生类调用)有(自身实例化用)
访问修饰符成员可设任意修饰符成员可设任意修饰符成员默认为静态成员默认为public,不可修改
多继承支持类只能单继承无继承能力无继承能力类可实现多个接口(间接多继承)
典型用途定义基类(如 "形状" 基类)保护实现(如string类)工具方法(如Console类)定义规范(如IDisposable接口)

关键区别总结

  • 抽象类侧重 "是一种" 的继承关系,接口侧重 "具有某种能力" 的规范实现。
  • 密封类限制继承以保护实现,静态类通过静态成员提供无状态工具功能。
  • 接口是实现多态和代码解耦的关键,允许不相关的类遵循同一标准。

选择时需根据实际需求:需共享实现逻辑选抽象类,需跨类规范选接口,需禁止扩展选密封类,需工具方法集选静态类。

前几期内容:

C# 抽象类_抽象方法 (abstract关键字)https://blog.csdn.net/LZQqqqqo/article/details/149608176?spm=1001.2014.3001.5502

C# 密封类_密封方法 (seadled 关键字)https://blog.csdn.net/LZQqqqqo/article/details/149609758?spm=1001.2014.3001.5502

C# 静态类_静态方法_静态字段(static 声明静态的关键字 )https://blog.csdn.net/LZQqqqqo/article/details/149721489?spm=1001.2014.3001.5502

C# 接口(interface 定义接口的关键字)https://blog.csdn.net/LZQqqqqo/article/details/149722372?spm=1001.2014.3001.5502 

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

    相关文章:

  • Qt 信号和槽正常连接返回true,但发送信号后槽函数无响应问题【已解决】
  • WinForm之ListBox 控件
  • Qt 槽函数被执行多次,并且使用Qt::UniqueConnection无效【已解决】
  • 电子电气架构 --- 汽车网络安全概述
  • Java高性能编程实践指南
  • cv弹窗,退款确认弹窗
  • Java中Lambda 表达式的解释
  • 【AI】AIService(基本使用与指令定制)
  • 操作系统:远程过程调用( Remote Procedure Call,RPC)
  • 公网服务器上Nginx或者Openresty如何屏蔽IP直接扫描
  • java中的synchronized关键字​
  • 福彩双色球第2025088期篮球号码分析
  • PyTorch 张量核心操作——比较、排序与数据校验
  • 利用DeepSeek将Rust程序的缓冲输出改写为C语言实现提高输出效率
  • 深入 Go 底层原理(十五):cgo 的工作机制与性能开销
  • 探索:Uniapp 安卓热更新
  • 【Android】RecyclerView实现新闻列表布局(1)适配器使用相关问题
  • 原生JS使用svg-pan-zoom库平移和缩放svg
  • 八股取士--docker
  • 【C++】第二十一节—一文详解 | 红黑树实现(规则+效率+结构+插入+查找+验证)
  • Day18--二叉树--530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先
  • 【MQ】kafka同步和异步的区别
  • 函数指针——回调函数
  • MybatisPlus-逻辑删除
  • Redis核心机制与实践深度解析:从持久化到分布式锁
  • 江协科技STM32 13-1 PWR电源控制
  • AG32mcu通过寄存器方式操作cpld
  • 3 使用 Jenkins 构建镜像:将你的应用打包成镜像
  • sqli-labs:Less-18关卡详细解析
  • 【隧道篇 / IPsec】(7.6) ❀ 02. 如何删除向导创建的IPsec安全隧道 (点对点) ❀ FortiGate 防火墙