C#怎么实现接口 C# interface定义与实现方法
发布时间 - 2026-01-03 00:00:00 点击率:次接口是C#中定义契约的机制,只声明成员签名而不提供实现,支持多继承,用于实现松耦合与面向接口编程;类通过冒号实现接口,需提供所有成员的具体实现;可显式实现以解决冲突或隐藏细节;接口可继承组合,构建分层能力契约。
在C#中,接口(interface)用于定义契约——它不包含实现,只声明方法、属性、事件或索引器的签名,具体实现由类或结构体完成。 接口支持多继承,是实现松耦合、依赖倒置和面向接口编程的关键机制。
定义接口:用 interface 关键字
接口用 interface 关键字声明,名称通常以大写字母 I 开头(如 IRepository)。接口内只能包含公有成员声明,不能有字段、构造函数、析构函数或静态成员(C# 8.0+ 允许默认实现和静态抽象成员,但基础用法仍以纯契约为主)。
示例:
public interface IAnimal
{
string Name { get; set; }
void MakeSound();
int Legs { get; }
}实现接口:用冒号 + 接口名
类或结构体通过 : 后跟接口名来实现接口。所有接口成员必须在实现类型中提供 public 的具体实现(除非是显式接口实现)。
- 实现属性需同时满足接口中 get/set 修饰符要求(如接口只写 get;,实现中可只提供 get 访问器)
- 方法必须与接口签名完全一致(返回类型、名称、参数个数与类型)
- 若一个类实现多个接口,用逗号分隔:class Dog : IAnimal, IMovable
示例:
public class Dog : IAnimal
{
public string Name { get; set; }
public int Legs => 4;
public void MakeSound()
{
Console.WriteLine("Woof!");
}}
显式接口实现:解决命名冲突或隐藏细节
当多个接口有同名成员,或想让接口成员仅通过接口类型访问(避免污染类的公共API),可用显式实现:不加访问修饰符,写成 接口名.成员名。
- 显式实现的成员只能通过接口变量调用
- 不能加 public 或其他修饰符
- 常用于实现 IEnumerable 或自定义集合接口时隐藏非核心方法
示例:
public class Container : IEnumerable, IDisposable { // 显式实现 IDisposable.Dispose void IDisposable.Dispose() => Console.WriteLine("Disposed");
// 显式实现 IEnumerable.GetEnumerator IEnumerator IEnumerable.GetEnumerator() => ...;}
接口继承与组合:构建分层契约
接口可以继承其他接口,用 : 语法,支持多重继承。子接口会自动包含父接口所有成员。
- 适合按能力拆分:如 IReadable、IWritable 可被 IReadWrite 继承
- 实现类只需写最顶层接口,无需重复列出所有父接口
- C# 8.0+ 支持默认接口方法(带实现),但慎用,避免破坏“接口=契约”的语义
示例:
public interface IWalkable
{
void Walk();
}
public interface IRunnable : IWalkable // 继承 IWalkable
{
void Run();
}
public class Human : IRunnable // 自动也实现了 IWalkable
{
public void Walk() => Console.WriteLine("Walking");
public void Run() => Console.WriteLine("Running");
}
基本上就这些。接口不是模板也不是基类,它是“能做什么”的约定。写得好,代码就容易测试、替换和扩展。
# ai
# c#
# 构造函数
# 析构函数
# 结构体
# 继承
# 多继承
# 接口
# class
# public
# 多重继承
# Interface
# 访问器
# 事件
# 多个
# 修饰符
# 只需
# 它是
# 而不
# 能有
# 或其他
# 自定义
# 想让
# 写得
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Linux安全能力提升路径_长期防护思维说明【指导】
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Bootstrap CSS布局之列表
Laravel Fortify是什么,和Jetstream有什么关系
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
再谈Python中的字符串与字符编码(推荐)
JS去除重复并统计数量的实现方法
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
浅述节点的创建及常见功能的实现
网站制作免费,什么网站能看正片电影?
详解jQuery中的事件
Laravel中的Facade(门面)到底是什么原理
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
如何基于PHP生成高效IDC网络公司建站源码?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
java ZXing生成二维码及条码实例分享
JavaScript中的标签模板是什么_它如何扩展字符串功能
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何在Windows 2008云服务器安全搭建网站?
Android使用GridView实现日历的简单功能
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何在企业微信快速生成手机电脑官网?
免费视频制作网站,更新又快又好的免费电影网站?
Java解压缩zip - 解压缩多个文件或文件夹实例
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
如何挑选高效建站主机与优质域名?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
,南京靠谱的征婚网站?
详解Android图表 MPAndroidChart折线图
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
如何解决hover在ie6中的兼容性问题
JavaScript常见的五种数组去重的方式
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
如何在IIS管理器中快速创建并配置网站?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
怎么用AI帮你为初创公司进行市场定位分析?
HTML 中动态设置元素 name 属性的正确语法详解
在Oracle关闭情况下如何修改spfile的参数
JS中对数组元素进行增删改移的方法总结
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
java获取注册ip实例
js实现点击每个li节点,都弹出其文本值及修改
Laravel怎么使用artisan命令缓存配置和视图
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
nginx修改上传文件大小限制的方法
如何快速生成可下载的建站源码工具?


iner : IEnumerable, IDisposable
{
// 显式实现 IDisposable.Dispose
void IDisposable.Dispose() => Console.WriteLine("Disposed");