0

0

C#如何实现接口和抽象类 C#接口与抽象类区别和用法

畫卷琴夢

畫卷琴夢

发布时间:2025-12-25 14:36:51

|

553人浏览过

|

来源于php中文网

原创

接口定义“能做什么”,抽象类定义“是什么”及“怎么做的一部分”;接口仅含成员签名、支持多实现,抽象类可含字段和实现、仅单继承,选择取决于设计意图而非语法。

c#如何实现接口和抽象类 c#接口与抽象类区别和用法

接口和抽象类都是C#中实现多态和代码复用的重要机制,但它们定位不同:接口定义“能做什么”,抽象类定义“是什么”以及“怎么做的一部分”。选哪个不看语法多酷,而要看设计意图。

接口(interface):契约式能力声明

接口只包含成员签名(方法、属性、事件、索引器),不带实现,也不允许字段、构造函数或访问修饰符(默认public)。从C# 8.0起支持默认方法实现,但本质仍是契约优先。

  • 一个类可实现多个接口,解决C#单继承限制
  • 适合定义跨领域、无继承关系的统一行为,比如IComparableIDisposableIAsyncEnumerable
  • 典型写法:public interface ILogger { void Log(string message); }
  • 实现时必须显式提供所有成员的具体逻辑,除非使用默认实现且不重写

抽象类(abstract class):半成品基类

抽象类可含抽象成员(无实现,强制子类重写)、具体成员(带实现)、字段、构造函数、甚至静态成员。它表达一种“类型归属”——子类本质上是它的特殊化。

拍我AI
拍我AI

AI视频生成平台PixVerse的国内版本

下载
  • 一个类只能继承一个抽象类,但可同时实现多个接口
  • 适合有共用状态或基础逻辑的场景,比如StreamException等框架基类
  • 典型写法:public abstract class Shape { public abstract double Area { get; } public virtual void Draw() => Console.WriteLine("Drawing..."); }
  • 子类用override重写抽象成员,用base.调用父类已实现方法

关键区别速查表

能否实例化?都不能直接new,但抽象类可被继承后实例化,接口需由实现类实例化。
成员实现?接口成员默认无实现(C#8+可有默认实现,但不改变其契约本质);抽象类可混用抽象与具体成员。
字段/构造函数?接口不能有字段或构造函数;抽象类可以。
访问修饰符?接口成员隐式public,不可加private/protected;抽象类成员可设protected、internal等。
版本演进?给接口新增成员会破坏已有实现类(需全部修改);抽象类可加非抽象成员并提供默认行为,更易扩展。

怎么选?看这三个问题

  • 是否想表达“属于同一类事物”?→ 优先抽象类(如Animal → Dog/Cat)
  • 是否想让无关类型共享某项能力?→ 优先接口(如File、Network、Memory都可支持IReadable
  • 是否需要共享字段或构造逻辑?→ 只能用抽象类
  • 不确定时,先定义接口;后续发现共性逻辑再引入抽象基类(接口+抽象实现类组合很常见)

基本上就这些。接口管“协议”,抽象类管“谱系”。用对了,代码松耦合又易维护;混着乱用,后期改起来才真要命。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1010

2023.08.02

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

java多态详细介绍
java多态详细介绍

本专题整合了java多态相关内容,阅读专题下面的文章了解更多详细内容。

27

2025.11.27

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

334

2025.08.29

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

106

2025.10.23

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

186

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

134

2025.11.27

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
极客学院Java8新特性视频教程
极客学院Java8新特性视频教程

共17课时 | 3.8万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

光速学会docker容器
光速学会docker容器

共33课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号