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.pswp.cn/web/88722.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux----------------------线程同步与互斥(上)

1.线程互斥 1-1 进程线程间的互斥相关背景概念 临界资源:多线程执行流共享的资源就叫做临界资源 临界区:每个线程内部访问临界资源的代码就叫做临界区 互斥:任何时刻,互斥保证只有一个执行进入临界区,对临界资源起…

百度AI的开放新篇章:文心4.5本地化部署指南与未来生态战略展望

百度AI的开放新篇章:文心4.5本地化部署指南与未来生态战略展望 一起来玩转文心大模型吧👉文心大模型免费下载地址:https://ai.gitcode.com/theme/1939325484087291906 🌟 嗨,我是IRpickstars! &#x1f30…

笔记/sklearn中的数据划分方法

文章目录一、前言二、数据划分方法1. 留出法(Hold-out)2. K折交叉验证(K-Fold)3. 留一法(Leave-One-Out)三、总结一、前言 简要介绍数据划分在机器学习中的作用。 二、数据划分方法 1. 留出法&#xff0…

Android14 开屏页SplashScreen设置icon圆角的原理

简介 我们在看到一个应用在启动的时候会看到一个启动的icon,这个图标是应用的icon当然也是可以应用自己去控制的如 <item name="android:windowSplashScreenAnimatedIcon">@drawable/adas_icon</item> 图上的效果明显不理想,图标是自带圆角,而且还是…

flutter redux状态管理

&#x1f4da; Flutter 状态管理系列文章目录 Flutter 状态管理(setState、InheritedWidget、 Provider 、Riverpod、 BLoC / Cubit、 GetX 、MobX 、Redux) setState() 使用详解&#xff1a;原理及注意事项 InheritedWidget 组件使用及原理 Flutter 中 Provider 的使用、注…

AMIS全栈低代码开发

amis是百度开源的前端低代码框架&#xff0c;它通过JSON配置来生成各种后台页面&#xff0c;旨在简化前端开发过程&#xff0c;提高开发效率&#xff0c;降低开发门槛。以下是详细介绍&#xff1a; 核心特点&#xff1a; 可视化开发&#xff1a;允许开发者通过可视化方式构建页…

【Python基础】变量、运算与内存管理全解析

一、删除变量与垃圾回收&#xff1a;内存管理的底层逻辑 在Python中&#xff0c;变量是对象的引用&#xff0c;而不是对象本身。当我们不再需要某个变量时&#xff0c;可以用del语句删除它的引用&#xff0c;让垃圾回收机制&#xff08;GC&#xff09;自动清理无引用的对象。 1…

Spring Boot + Javacv-platform:解锁音视频处理的多元场景

Spring Boot Javacv-platform&#xff1a;解锁音视频处理的多元场景 一、引言 在当今数字化时代&#xff0c;音视频处理已成为众多应用场景中不可或缺的一部分&#xff0c;从在线教育、视频会议到短视频平台、智能安防等&#xff0c;音视频数据的处理与分析需求日益增长。Java…

k8s 的基本原理、架构图、使用步骤和注意事项

Kubernetes&#xff08;k8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用。以下是其基本原理、使用步骤和注意事项的总结&#xff1a;一、k8s 基本原理核心架构 Master 节点&#xff1a;控制集群的核心组件&#xff0c;包括&#xff…

Qt 多线程编程:单例任务队列的设计与实现

引言&#xff1a; 在现代应用程序开发中&#xff0c;多线程编程已成为处理异步任务的标配。对于 GUI 应用而言&#xff0c;保持主线程的响应性尤为重要。本文将详细介绍一个基于 Qt 的单例任务队列实现方案&#xff0c;它通过线程池和单例模式&#xff0c;优雅地解决了后台任务…

OpenEuler操作系统中检测插入的USB设备并自动挂载

OpenEuler操作系统中检测插入的USB设备并自动挂载 项目需求&#xff1a;工控机上openeuler操作系统是无界面版本的&#xff0c;在工控机上连接了激光雷达&#xff0c;当激光雷达采集完数据&#xff0c;我们要将采集数据导入u盘&#xff0c;故需要在工控机上插入u盘&#xff0c;…

《Spring 中上下文传递的那些事儿》Part 11:上下文传递最佳实践总结与架构演进方向

&#x1f4dd; Part 11&#xff1a;上下文传递最佳实践总结与架构演进方向 经过前面几篇文章的深入探讨&#xff0c;我们已经系统性地学习了 Spring 应用中上下文传递的各种技术原理、常见问题以及解决方案。从 Web 请求上下文到异步任务、从多租户隔离到日志脱敏&#xff0c;…

使用云虚拟机搭建hadoop集群环境

使用云虚拟机搭建hadoop集群环境 安装jdk17 配置docker网络 docker network create --subnet172.18.0.0/16 hadoop 172.18.0.0&#xff1a;这是子网的网络地址&#xff0c;也就是这个网络的起始地址。/16&#xff1a;这是子网掩码&#xff08;Network Mask&#xff09;&#x…

【机器学习】吴恩达机器学习课程代码作业-Python版本

吴恩达老师的机器学习课程作业是MATLAB版本&#xff08;Octave&#xff09;的&#xff0c;现在有点过时了&#xff0c;我参考了几位大牛的代码&#xff0c;将作业改成了Python3.6版本&#xff0c;并做了中文注释&#xff0c;推荐使用Jupyter notebook。Python作业使用了原版数据…

2025年人工智能、虚拟现实与交互设计国际学术会议

重要信息 官网&#xff1a;www.aivrid.com 时间&#xff1a;2025年10月17-19日 地点&#xff1a;中国-东莞 部分介绍 征稿主题 包括但不限于&#xff1a; 生物特征 模式识别 机器视觉 专家系统 深度学习 智能搜索 自动编程 智能控制 智能机器…

SHA-256算法流程分析与详解——Github工程结合示例和动画演示

近日笔者在学习区块链的相关知识&#xff0c;接触到SHA-256算法&#xff0c;这里做一个知识梳理和总结。 强烈推荐大家自行去学习下面链接github上的工程&#xff0c;作者的动画演示和解释做的非常出色&#xff0c;逻辑非常清晰&#xff0c;B站搬运的对应的油管的讲解视频也放…

CSPNet: A New Backbone that can Enhance Learning Capability of CNN (CSP模块)

3. Method 方法 3.1 Cross Stage Partial Network 跨阶段局部网络 3.1.1 Cross Stage Partial Network 跨阶段局部网络 3.1.1.1 ResNet 和 DenseNet 的优缺点主流的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;如ResNet [8]、ResNeXt [37]、DenseNet [11]&#x…

前端学习4:小白入门注册表单的制作(包括详细思考CSS、JS实现过程)

这篇我们来做一个简单表单&#xff0c;即常见的注册页面吧~学习完这篇我们将学习到Input、label、CSS伪类、CSS入门、更多的JS操作等。。一、首先明确需求&#xff1a;直接模仿常见的注册页面&#xff0c;包括&#xff1a;用户名、Email、性别&#xff08;单选按钮男/女&#x…

强化学习 (RL) 新突破:超越游戏,走向复杂现实决策

强化学习 (RL) 新突破&#xff1a;超越游戏&#xff0c;走向复杂现实决策 强化学习&#xff08;Reinforcement Learning&#xff0c; RL&#xff09;作为人工智能的核心范式之一&#xff0c;历经数十年的发展&#xff0c;正迎来一场深刻的范式转移。曾以战胜人类顶尖选手的Alph…

2025年6-7月AI领域关键进展:从药物研发到全球监管--AI深度融入产业与社会

2025年6月至7月&#xff0c;人工智能领域继续以惊人速度发展&#xff0c;在技术突破、行业应用、政策法规、企业战略及学术研究等方面取得了一系列重要里程碑。以下为关键动态&#xff1a;一、技术突破&#xff1a; AI向生命科学和认知科学纵深挺进DeepMind启动AI设计药物人体试…