当前位置: 首页 > 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://canary.tmizpp.cn
http://awing.tmizpp.cn
http://argo.tmizpp.cn
http://bobwhite.tmizpp.cn
http://anonymity.tmizpp.cn
http://awanting.tmizpp.cn
http://archaeozoic.tmizpp.cn
http://beanery.tmizpp.cn
http://anthranilate.tmizpp.cn
http://blighted.tmizpp.cn
http://bustle.tmizpp.cn
http://aborted.tmizpp.cn
http://calputer.tmizpp.cn
http://boondockers.tmizpp.cn
http://acidimetrical.tmizpp.cn
http://authorware.tmizpp.cn
http://apa.tmizpp.cn
http://bisayan.tmizpp.cn
http://ascendant.tmizpp.cn
http://breast.tmizpp.cn
http://alteration.tmizpp.cn
http://bakehouse.tmizpp.cn
http://arietis.tmizpp.cn
http://chalaza.tmizpp.cn
http://binate.tmizpp.cn
http://asti.tmizpp.cn
http://calcareousness.tmizpp.cn
http://adolescency.tmizpp.cn
http://agar.tmizpp.cn
http://amerceable.tmizpp.cn
http://www.dtcms.com/a/278219.html

相关文章:

  • 终极剖析HashMap:数据结构、哈希冲突与解决方案全解
  • 【面板数据】上市公司诉讼风险、诉讼次数等数据集(2007-2023年)
  • 【LeetCode100】--- 4.移动零【复习回顾】
  • 剑指offer58_和为S的连续正数序列
  • 深入理解 LangChain:AI 应用开发的全新范式
  • 人工智能到底是什么?揭开 AI 的神秘面纱
  • Spring @Autowired:依赖注入的核心奥秘
  • markdown-it-mathjax3-pro —— 新一代 Markdown 数学公式渲染插件
  • 代码精进之路
  • NumPy 中 np.c_ 的用法解析
  • Prometheus 第一篇:快速上手
  • 哪些行业的“反内卷”前景更好?
  • DL00454-深度学习牲畜资产管理圈养生猪行为识别含数据集
  • Docker搭建Redis哨兵集群
  • 代码部落 20250713 CSP-S复赛 模拟赛
  • Windows上使用配置Claude Code教程
  • 软件文档体系深度解析:工程视角下的文档架构与治理
  • 知识图谱构建简单分享
  • Task-driven Image Fusion with Learnable Fusion Loss
  • 嵌入式固件 .pkg 打包流程
  • DNS解析过程和nmap端口扫描
  • 大模型之Langchain篇(二)——RAG
  • C语言:流程控制
  • 前四天综合总结
  • 嵌入式 Linux开发环境构建之安装 SSH 软件
  • 【Lmdeploy】大模型本地化部署
  • 技术文章大纲:C++内存泄漏排查大赛
  • Node.js特训专栏-实战进阶:16. RBAC权限模型设计
  • 05.判断日期是工作日还是周末
  • 搭建个人Manus-JManus-00-集合介绍