Visual Studio中的接口

目录

一、接口的核心定义

二、接口语法

三、实现接口

四、接口的关键特性

五、接口与抽象类的核心异同对比

一、相同点

1.无法实例化

2.包含抽象成员

3.支持多态

二、核心区别

三、关键特性补充

1.接口的"契约性"

2.抽象类的"模板性"

四、使用场景建议

六、接口的多继承

一、核心定义

二、类实现多个接口(类的多接口实现)

1.语法规则

2.代码示例

3.核心用途

三、接口继承多个接口(接口的多接口继承)

1.语法规则

2.代码示例

3.核心用途

四、注意事项

[1. 方法名冲突的解决](#1. 方法名冲突的解决)

[2. 接口的继承限制](#2. 接口的继承限制)

五、接口多继承的优势


一、接口的核心定义

接口是C#中定义契约的引用类型 ,使用interface关键字 进行定义,且仅包含方法、属性、事件或索引器的签名,不包含具体实现 。它的核心作用是规范类的行为,实现多态和解耦。

二、接口语法

接口里面的成员不能赋初始值 默认是public类型,也不能添加public类型。
定义接口方法的时候不能实现。

public interface IShape

{

// 方法签名(无实现)

double GetArea();

// 属性签名(仅定义访问器)

int Sides { get; }

}

三、实现接口

类实现接口:使用继承的方法形式来实现,且派生类中必须实现基类接口的所有成员。

可以让一个类同时继承于类和其他接口,但必须保证类写在前面。

public class Circle : IShape

{

public double Radius { get; set; }

// 实现接口方法

public double GetArea()

{

return Math.PI * Radius * Radius;

}

// 实现接口属性

public int Sides => 0; // 圆无边

}

四、接口的关键特性

多继承支持:类可以实现多个接口。

解耦与多态 :通过接口类型引用不同实现类的对象 ,实现灵活替换。(如应用上述代码内容:IShape shape = new Circle();

无字段 / 构造函数接口不能包含字段、构造函数或静态成员,仅定义行为契约。

五、接口与抽象类的核心异同对比

一、相同点

两者均为面向对象设计中规范行为、实现多态的核心机制,具有以下共性:

1.无法实例化

仅作为基类型定义契约,需要通过派生类 / 实现类实例化 (如应用上述代码内容:IShape shape = new Circle();

2.包含抽象成员

均可以定义为实现的方法签名,强制子类 / 实现类提供具体逻辑。

3.支持多态

通过基类引用指向派生类对象,让派生类的对象赋值给抽象类或者接口类型变量,实现"同一接口,不同行为"。

二、核心区别

|-----------|-----------------------------------------------------------|---------------------------------------------------------------------|
| 对比维度 | 接口 | 抽象类 |
| 定义本质 | 存粹的契约行为(仅规定"做什么",但没有具体实现) | 包含部分实现的基类(既规定"做什么",也提供"怎么做"的通用逻辑),如 Animal 基类 |
| 成员类型 | 方法、属性、索引器、事件(都不能实现),默认实现方法、静态成员 | 抽象成员:抽象方法、抽象属性、抽象索引器、抽象事件,普通成员:实例字段、普通方法、虚方法/虚属性、静态成员、构造函数 |
| 继承方式 | 支持多实现(一个类可以实现多个接口,如 class Dog : IRunable, IEatable | 仅支持单继承(一个类只能继承一个抽象类) |
| 构造函数 | 无构造函数(接口本身不存储状态) | 有构造函数(用于初始化派生类共享的状态,如 AnimalName 属性) |
| 范围修饰符 | 成员默认公开public,且不可修改,但是不可以添加public修饰符 | 成员可以使用private/protected/public 等修饰符(如抽象方法可设为 protected |
| 设计意图 | 强调外部行为一致性 | 强调内部逻辑服用 |

三、关键特性补充

1.接口的"契约性"

接口一旦定义,实现类必须全部实现其成员,否则需要声明为抽象类。

例如:

2.抽象类的"模板性"

抽象类可以包含通用逻辑,子类仅需实现差异化部分。

例如:

四、使用场景建议

|-------------------|-------------------------------------------------------|
| 选择接口的情况 | 选择抽象类的情况 |
| 需为不相关的类定义统一行为 | 需为相关的类提供通用逻辑 |
| 需支持多态下的灵活替换 | 需版本迭代(抽象类可新增非抽象方法,不破坏现有子类) |
| 需定义回调机制 | 需封装状态与行为 (如 User 抽象类包含 Name 字段和 Login() 方法) |

六、接口的多继承

一、核心定义

在C#中,"接口的多继承"包含两种合法场景(需注意与类的单继承区分):

  • 类实现多个接口:一个类同时满足多个接口的契约(类的"多实现")。
  • 接口继承多个接口 :一个接口整合多个父接口的行为规范(接口的"多继承")。
    这两种方式是C#实现行为组合与多态的关键机制。

二、类实现多个接口(类的多接口实现)

类通过实现多个接口,同时具备多种独立的行为能力,是接口多继承最常见的应用场景。

1.语法规则

类声明时用:后跟多个接口,接口间用逗号分隔开

2.代码示例
3.核心用途

让类具备跨纬度的行为(如 Dog 同时是"可跑"和"可吃"的)。

解耦功能扩展:无需修改类的继承链,通过新增接口实现功能扩展。

三、接口继承多个接口(接口的多接口继承)

接口可通过继承多个父接口,组合形成更复杂的行为契约(类似"接口的聚合")。

1.语法规则

接口声明时用 : 后跟多个父接口,接口间用逗号分隔。

2.代码示例
3.核心用途

定义复合行为规范(如 IAnimal 整合了"跑"和"吃"的基础能力)。

简化类的实现:类只需要实现一个整合接口,即可满足多个父接口的契约。

四、注意事项

1. 方法名冲突的解决

若实现的多个接口包含同名同参方法 ,需通过显式接口实现区分逻辑:

2. 接口的继承限制
  • 接口只能继承接口,不能继承类(包括抽象类)。
  • 只能继承一个基类 ,但可同时实现多个接口(如 public class Dog : AnimalBase, IRunnable, IEatable)。

五、接口多继承的优势

|------------|-------------------------------------------------------|
| 优势 | 说明 |
| 行为组合灵活 | 无需修改类的继承关系,通过接口组合快速扩展功能(如给 Dog 新增 ISwimmable 接口)。 |
| 多态支持完善 | 可通过任一接口类型引用对象(如 IRunnable runnable = new Dog();)。 |
| 契约边界清晰 | 每个接口专注单一职责(如 IRunnable 仅定义"跑"的行为),组合后职责不重叠。 |

相关推荐
客梦5 小时前
数据结构-红黑树
数据结构·笔记
(●—●)橘子……5 小时前
记力扣42.接雨水 练习理解
笔记·学习·算法·leetcode·职场和发展
悠哉悠哉愿意5 小时前
【EDA学习笔记】PCB技术导入
笔记·学习·eda
阿蒙Amon5 小时前
C#每日面试题-类和结构的区别
开发语言·c#
Bin二叉5 小时前
南京大学cpp复习(c10——多态、操作符重载)
开发语言·c++·笔记·学习
若数6 小时前
vscode如何打开多个标签
ide·vscode·编辑器
降临-max6 小时前
JavaWeb企业级开发---快速入门、请求响应、分层解耦
java·开发语言·笔记·学习
淡笑沐白6 小时前
Visual Studio2022离线安装完整教程
visual studio·vs2022离线安装
EchoL、6 小时前
【论文阅读】HiDDeN:Hiding Data With Deep Networks
论文阅读·笔记·机器学习