C#开发——接口Interface

接口可被视为关于功能的协定,实现接口的任何类,必须拥有该接口的所有方法和属性;

作为交换,通过使用多态,其他类可将实现类视作接口;

一、接口的使用

1、通常在类外部声明接口,一个接口使用一个脚本,也可以在一个脚本中声明多个接口;

声明接口所使用的名称大写字母 I 开头,后接另一个大写字母开头的名称;

由于接口通常描述实现类将具备的某种功能,因此许多接口以后缀able结尾;

2、要实现接口,只需在类具有的任何继承后,添加一个逗号,后跟接口名称;

如果类不是从其他类继承而来(没有父类),则不需要逗号;

如果是泛型接口,接口名后跟尖括号,输入类型;

3、实现接口的任何类,必须实现该接口的所有方法和属性;

并且为了实现接口,类必须公开声明这个接口中存在的所有方法、属性、事件和索引器;

对于泛型类型的接口,接口里的任何内容都可以具有泛型类型;

当类实现具有泛型类型的接口时,必须声明内部泛型方法的类型,后面始终使用相同的类型;

4、注意:接口不是类,不能有自己的实例;

二、接口的优势

主要优势是允许跨多个类定义通用功能;

因此可以根据类实现的接口,安全地对类的用途做出假设;

三、接口和继承的区别

继承是基类和衍生类关系:一个类继承自另一个类;

接口是实现关系:一个类实现一个接口;

既然可以在一个类中合理使用函数,并让其他类继承这个函数,为什么还要在类中实现接口?

因为:

1、你可以实现多个接口,但不能继承多个类;因此可以通过接口,可以提供广泛功能

2、接口用于跨多个互不相关的类,定义通用功能;

四、简单的接口使用示例

1、两种接口的声明:

cs 复制代码
public interface IKillable
{
    void Kill();
}

public interface IDamageable<T>
{
    void Damage(T t);
}

2、在两个基本不相关的类里实现同一个接口,实现同一个方法

cs 复制代码
using UnityEngine;

public class Car : IDamageable<float>
{
    public void Damage(float f)
    {
        Debug.Log("车的破损程度为:" + f + "%");
    }
}
cs 复制代码
using UnityEngine;

public class Wall : IKillable, IDamageable<int>
{
    public void Damage(int num)
    {
        Debug.Log(num + "面墙受到破坏");
    }

    public void Kill()
    {
        Debug.Log("墙被拆了");
    }
}

五、接口的通用实现

在C#8.0后,引入了默认接口实现的特性,它允许在接口中定义默认的方法实现。

这意味着你可以在接口中提供方法的默认实现,而不需要在实现接口的类中重复编写相同的代码。

详细内容可参考:C#默认接口实现_c# 接口默认实现-CSDN博客

相关推荐
c#上位机1 天前
C#上位机项目实战——Task.Run执行带参数的方法
c#·上位机
Lost of 程序猿1 天前
用 YARP 为 .NET 微服务搭一座“立交桥“:路由转发与生产配置实践
c#·asp.net
点纭2 天前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#
用户788477316342 天前
用 .NET MAUI 一套 C# 同时出 Windows 和 Android:哪些是真能共享,哪些是 marketing
c#
Lost of 程序猿2 天前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net
林川~012 天前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
He BianGu2 天前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster
tang_04272 天前
【Hi.Ltd 专题】第9期:Interop 配置互操作(JSON/INI/XML/YAML/注册表/扫码)
经验分享·c#·hi.ltd系列
tang_04273 天前
【Hi.Ltd 专题】第7期:Threading 采集线程、锁与 LRU 缓存
经验分享·c#·hi.ltd系列
A_nanda3 天前
C# 界面卡顿:从定位到根治
c#