【系列文章目录】
文章目录
前言
本篇介绍结构体
一、接口的作用
先看看【C#文档——接口】中的定义吧
接口包含非抽象 class 或 struct 必须实现的一组相关功能的定义。
结合定义及使用经验,我觉得接口有以下作用
二、接口的特点
接口包含以下特点:
-
接口的成员
-
接口本身是抽象的
接口与抽象类类似,不能被实例化 -
接口只有抽象成员
接口与抽象类的不同点,接口定义的时候不可以包含实现 -
实现接口的任何类或结构体必须实现接口成员
接口的作用是设计,设计之后当然需要实现 -
一个类或结构体可以实现多个接口
基于这个特性,我们在接口设计上,可以做到每个接口的功能都是单一的
根据接口隔离原则,我们也确实应该让每个接口功能尽量少
在定义一个类或结构体时,用多个小结构来组合,而不是用一个非常巨大的接口
三、接口的实现
-
隐式实现
这是一种常见的接口实现方式
public interface ICanRun{ public void Run(); } public class Cat : ICanRun{ public void Run(){ //具体逻辑 //... } }
-
显示实现
显示实现比较不常见
public interface ICanRun{ public void Run(); } public class Cat : ICanRun{ public void ICanRun.Run(){ //具体逻辑 //... } }
-
显示实现的作用
以上两种方式都可以实现一个接口而隐式实现写法简单,我们为什么要使用显示实现呢?
按照官方的说法是
接口的显示实现可以解决接口方法可能重名的问题
然而事情并没有表面上这么简单
接口的显示实现还有许多妙用
首先我们需要知道:
当一个接口方法为显示实现时,需要通过以这个接口类型来调用
举个例子
//当显示实现了ICanRun中的Run()时,这样写是错误的 Cat pipi = new Cat(); pipi.Run(); //不论是否显示实现,这样写都是正确的 ICanRun pipi = new Cat(); pipi.Run();
通过以上两个例子,我们可以总结接口显示实现的特殊用途:
上面两个用途,其实都属于同一个特点,只是用途不同而已
-