C#-接口

接口 (interface) 定义了一个可由类和结构实现的协定。接口可以包含方法、属性、事件和索引器。接口不提供它所定义的成员的实现 — 它仅指定实现该接口的类或结构必须提供的成员。
接口可支持多重继承。在下面的示例中,接口 IComboBox 同时从 ITextBox 和 IListBox 继承。

interface IControl
{void Paint();
}interface ITextBox : IControl
{void SetText(string text);
}interface IListBox : IControl
{void SetItems(string[] items);
}interface IComboBox : ITextBox, IListBox
{
}

类和结构可以实现多个接口。在下面的示例中,类 EditBox 实现了 IControl 和 IDataBound。

interface IDataBound
{void Bind(Binder b);
}public class EditBox : IControl, IDataBound
{public void Paint(){...}public void Bind(Binder b){...}
}

当类或结构实现某个特定接口时,该类或结构的实例可以隐式地转换为该接口类型。
例如:

EditBox editBox = new EditBox();
IControl control = editBox;
IDataBound dataBound = editBox;

在无法静态知道某个实例是否实现某个特定接口的情况下,可以使用动态类型强制转换。例如,下面的语句使用动态类型强制转换获取对象的 IControl 和 IDataBound 接口实现。由于该对象的实际类型为 EditBox,此强制转换成功。

object obj = new EditBox();
IControl control = (IControl)obj;
IDataBound dataBound = (IDataBound)obj;

在前面的 EditBox 类中,来自 IControl 接口的 Paint 方法和来自 IDataBound 接口的 Bind 方法是使用 public 成员实现的。C# 还支持显式接口成员实现,类或结构可以使用它来避免将成员声明为 public。显式接口成员实现使用完全限定的接口成员名。
例如,EditBox 类可以使用显式接口成员实现来实现 IControl.Paint 和 IDataBound.Bind 方法,如下所示:

public class EditBox : IControl, IDataBound
{void IControl.Paint(){...}void IDataBound.Bind(Binder b){...}
}

显式接口成员只能通过接口类型来访问。例如,要调用上面 EditBox 类提供的 IControl.Paint 实现,必须首先将 EditBox 引用转换为 IControl 接口类型。

EditBox editBox = new EditBox();
editBox.Paint(); // Error, no such method
IControl control = editBox;
control.Paint(); // Ok

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603088.shtml

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

相关文章

IIS+SDK+VS2010+SP1+SQL server2012全套工具包及安装教程

前言 今天花了两个半小时安装这一整套配置,这个文章的目标是将安装时间缩短到1个小时 正文 安装步骤如下: VS2010 —> service pack 1 —>SQL server2012 —> IIS —> SDK 工具包链接如下: https://pan.baidu.com/s/1WQD-KfiUW…

[技术杂谈]使用VLC将视频转成一个可循环rtsp流

通过vlc播放器,将一个视频转成rtsp流,搭建一个rtsp服务器。rtsp客户端可访问这个视频的rtsp流。 1. 打开vlc播放器,使用的版本如下 2. 菜单:媒体 ---> 流 3. 添加视频文件,点击添加一个mp4 文件 4. 选择串流&…

如何安装和使用夜神模拟器连接Android Studio

目录 简介 一、安装 二、使用 三、更多资源 简介 夜神模拟器是一款在Windows平台上运行的Android模拟器软件。它能够模拟Android操作系统环境,让用户在电脑上轻松体验Android应用程序。夜神模拟器的功能强大,可以满足各种需求,无论是娱乐…

故障诊断 | 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型(matlab +python)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 故障诊断 | 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型(matlab python) 基于FFT频谱与小波时频图的双流CNN轴承故障诊断模型 特征拼接 python(pytorch) 基于2D-…

可视化速通知识点

本文仅仅是我对可视化主要知识的一些记忆与思考,欢迎大家学习与批评指正。 首先,什么是可视化?可视化是利用计算机图形学和图像处理技术,将数据在屏幕上显示出来,并使用交互式处理的方法、理论和技术。 可视化的基本流…

大模型迎来“AppStore时刻”,OpenAI给2024的新想象

一夜之间,OpenAI公布了多个重磅消息,引发市场关注。 钛媒体App 1月5日消息,今晨,OpenAI公司向所有GPT开发者们发布一封邮件称,下周将上线自定义的“GPT Store”商店,这有望推动ChatGPT开发者生态不断完善。…

开源加解密库之GmSSL

一、简介 GmSSL是由北京大学自主开发的国产商用密码开源库,实现了对国密算法、标准和安全通信协议的全面功能覆盖,支持包括移动端在内的主流操作系统和处理器,支持密码钥匙、密码卡等典型国产密码硬件,提供功能丰富的命令行工具及…

多线程高级知识点

多线程高级知识点 1.ThreadLocal 1.1 什么是 ThreadLocal? ​ ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程…

服务器运维管理面板1Panel本地部署并结合内网穿透实现远程访问

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…

EtherCAT主站SOEM -- 13 --Qt-Soem通过界面按键控制 EtherCAT IO模块的io输出

EtherCAT主站SOEM -- 13 --Qt-Soem通过界面按键控制 EtherCAT IO模块的io输出 一 mainwindow.c 文件函数:1.1 自定义PDO配置2.2 主站初始化2.3 去motrorcontrol界面二 motrorcontrol.c 文件三 allvalue.h 文件该文档修改记录:总结一 mainwindow.c 文件函数: mainwindow主界…

Docker学习与应用(四)-容器数据卷

1、容器数据卷 1)什么是容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化 MySQL,容器删…

MYSQL 存储过程/存储函数

简而言之,类似于封装函数 特点 基本语法 create peocedure p1() begin select coun(*) from studuent; end; call p1(); 设置完别忘了把delimiter改回来 变量 系统变量 用户自定义变量 set myname its; set myage : 10; 局部变量 if 参数(IN&…

Oracle VM VirtualBox xx needs the Micrsoft Visual C++ 2019错误

错误展示 解决方法 重修安装 Visual C 文件 1、前往官网 C 中 Windows 编程概述 | Microsoft Learn 2、找到对应的包 左边导航栏依次选择: 部署本机桌面应用程序-----重新分发Visual C 文件-----最新受支持的Visual C可再发型程序包下载 根据自己电脑系统进行选…

linux mv command and authority managemet

mv abbreviation for move, as to move files and folders or change the folder name/ rename the specific folderLinux常见权限解释 -rw------- (600) 只有拥有者有读写权限。 -rw-r–r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。 -rwx--…

私域运营常用的ChatGPT通用提示词模板

私域流量获取:如何获取更多的私域流量,提高用户粘性和转化率? 私域用户画像:如何建立私域用户的画像,了解用户需求和行为习惯? 私域内容运营:如何制定有效的私域内容策略,提高用户…

mybatis和Hibernate对比

MyBatis和Hibernate是两个在Java开发中常用的持久化框架,它们有以下区别: 1. ORM vs. SQL映射: - Hibernate是一个全功能的ORM(对象关系映射)框架,它将Java对象与数据库表之间的映射关系进行管理&#xff0…

Python 教程 02:Python 编程环境的搭建与 IDE 的选择

目录 一、搭建 Python 环境 1.1 Python 官网 1.2 下载 Python 1.2.1 选择版本 1.2.2 选择平台 1.2.3 下载安装文件(Windows & macOS) 1.3 安装环境 1.3.1 Windows 平台 1.3.2 macOS 平台 1.3.3 Linux 平台 1.4 验证安装是否成功 二、选择…

小游戏实战丨基于PyGame的贪吃蛇小游戏

文章目录 写在前面PyGame贪吃蛇注意事项系列文章写在后面 写在前面 本期内容:基于pygame的贪吃蛇小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700188 实验环境 python3.11及以上pycharmpygame 安装pygame的命令:…

Jedis快速入门

Jedis快速入门 1.Jedis使用的基本步骤:1.1 引入依赖1.2 创建Jedis对象,建立连接1.3 使用Jedis,方法名与Redis命令一致1.4 释放资源1.5 完整代码1.6 可视化工具查看 2.Jedis的连接池2.1 代码2.2 获取连接修改如下 1.Jedis使用的基本步骤&#…

Mac 升级ruby 升级brew update

Mac 自身版本是2.x 查看ruby版本号 打开终端 ruby -v 1.brew update 如果报错 这时候brew更新出问题了 fatal: the remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed error: RPC failed; curl 18 HTTP/2 stream 3 was reset fatal: th…