当前位置: 首页 > news >正文

C# 接口(接口可以继承接口)

接口可以继承接口

之前我们已经知道接口实现可以从基类被继承,而接口本身也可以从一个或多个接口继承而来。

  • 要指定某个接口继承其他的接口,应在接口声明中把基接口名称以逗号分隔的列表形式
    放在接口名称后面的冒号之后,如下所示。

  • 类在基类列表中只能有一个类名,而接口可以在基接口列表中有任意多个接口。

    • 列表中的接口本身可以继承其他接口。
    • 结果接口包含它声明的所有成员和基接口的所有成员。
      图16-11中的代码演示了3个接口的声明。IDataIO接口从前两个接口继承而来图右边部分
      显示IDataIO包含了另外两个接口。
interface IDataIO:IDataRetrieve,IDatatStore
{interface IDataRetrieve{int GetData();}interface IDatatStore{void SetData(int x);}//从前两个接口继承而来interface IDataIO:IDataRetrieve,IDatatStore{}class MyData:IDataIO{int nPrivateData;public int GetData(){return nPrivateData;}public void SetData(int x){nPrivateData=x;}}class Program{static void Main(){MyData data=new MyData();data.SetData(5);Console.WriteLine("{0}",data.GetData());}}
}

不同类实现一个接囗的示例

如下代码演示了已经介绍过的接口的一些方面。程序声明一个名为Animal的类,它被作为
其他一些表示各种类型动物的类的基类。它还声明了一个叫作ILiveBirth的接口。
Cat、Dog和Bird类都从Animal基类继承而来。Cat和Dog都实现了ILiveBirth接口,而Bird
类没有。
在Main中,程序创建了Animal对象的数组并用3个动物类的对象进行填充。然后,程序遍
历数组并使用as运算符获取指向ILiveBirth接口的引用,并调用了BabyCalled方法。

interface ILiveBirth   //声明接口
{string BabyCalled();
}class Animal{}   //基类Animalclass Cat:Animal,ILiveBirth    //声明Cat类
{string ILiveBirth.BabyCalled(){return "kitten";}
}class Dog:Animal,ILiveBirth    //声明Dog类
{string ILiveBirth.BabyCalled(){return "puppy";}class Bird:Animal          //声明Bird类{}class Program{static void Main(){Animal[] animalArray=new Animal[3];   //创建Animal数组animalArray[0]=new Cat();             //插入Cat类对象animalArray[1]=new Bird();            //插入Bird类对象animalArray[2]=new Dog();             //插入Dog类对象foreach(Animal a in animalArray)      //在数组中循环{ILiveBirth b= a as ILiveBirth;    //如果实现ILiveBirthif(b!=null)Console.WriteLine($"Baby is called:{b.BabyCalled()}");}}}
}

图16-12演示了内存中的数组和对象。

Animal基类的不同对象类型在数组中的布局

http://www.lryc.cn/news/587428.html

相关文章:

  • MySQL SQL语句精要:DDL、DML与DCL的深度探究
  • 大模型-量化技术
  • mmap映射文件
  • mapstruct与lombok冲突原因及解决方案
  • Java面试基础:面向对象(2)
  • 利用 MySQL 进行数据清洗
  • System.getenv()拿不到你配置的环境变量
  • 流程控制:从基础结构到跨语言实践与优化
  • IP 地址与网络基础全面解析
  • AI驱动的软件工程(中):文档驱动的编码与执行
  • 【前端知识】移动端APP原生应用与H5交互底层逻辑
  • C#接口进阶:继承与多态实战解析
  • 高压空气冲击炮cad【3张】三维图+设计说明书
  • AutoDL挂载阿里云OSS
  • 01.深入理解 Python 中的 if __name__ == “__main__“
  • 自动润滑系统:从 “盲目养护“ 到智能精注的工业运维革命
  • MD5算法深度剖析与可视化解析
  • MailSpring
  • C++--unordered_set和unordered_map的使用
  • 基于 STM32H743VIT6 的边缘 AI 实践:猫咪叫声分类 CNN 网络部署实战(已验证)中一些bug总结
  • Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge)笔记250713
  • python3的可变参数如何传递元组和字典
  • 第七章 算法题
  • 016_Token计数与成本管理
  • python:使用openpyxl库,实现excel表格的创建、查询(读取)、修改、插入数据
  • 在新版本的微信开发者工具中使用npm包
  • 开源工具DeepFilterNet:实时语音降噪
  • AI驱动的软件工程(上):人机协同的设计与建模
  • Vue 3 TypeScript 接口(Interface)使用
  • (一)SAP Group Reporting (GR) 集团财务合并解决方案套件概述