c#接口使用详解
c#接口使用详解
c#中接口隐式与显示实现
c#中接口可以隐式实现、显示实现,隐式实现更常使用、显示实现较少使用
其区别在于
- 显示实现避免接口函数签名冲突
- 显示实现只可以以接口形式调用
- 显示实现其子类需无法继承接口
- 隐式实现可以撕裂调用、可以接口调用
- 隐式实现其子类可以继承接口的实现
- 隐式实现可以使用虚函数、子类可以重载
定义接口:
interface IShowMsg
{
void Show();
}
隐式实现示例:
class ShowMsgImplicit : IShowMsg
{
public void Show()
{
Console.WriteLine("ShowMsgImplicit");
}
}
显示实现示例:
class ShowMsgExplicit : IShowMsg
{
void IShowMsg.Show()
{
Console.WriteLine("ShowMsgExplicit");
}
}
若使用:
var showMsgExplicit = new ShowMsgExplicit();
showMsgExplicit.Show();
将报错,只能使用(showMsgExplicit as IShowMsg).Show();调用
接口在继承中的使用
接口显示实现是无法在继承中保留的,若希望子类继承接口的实现需使用隐式实现。
- 使用隐式实现
- 若子类可以overwrite请使用virtual关键字修饰实现函数
- 可以定义abstract类继承接口,强制子类实现接口
父类实现接口:
class ShowMsgImplicit : IShowMsg
{
public virtual void Show()
{
Console.WriteLine("ShowMsgImplicit");
}
}
子类继承父类之后可以重载或者默认使用父类方法实现接口。
抽象类实现接口:
abstract class ShowMsgAbstract : IShowMsg
{
public abstract void Show();
}
子类继承抽象类必须实现抽象方法实现接口。
c#接口使用详解的更多相关文章
- Java语言Socket接口用法详解
Socket接口用法详解 在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...
- Java之函数式接口@FunctionalInterface详解(附源码)
Java之函数式接口@FunctionalInterface详解 函数式接口的定义 在java8中,满足下面任意一个条件的接口都是函数式接口: 1.被@FunctionalInterface注释的接口 ...
- SpringMVC(4.2):Controller接口控制器详解(2)
原文出处: 张开涛 4.5.ServletForwardingController 将接收到的请求转发到一个命名的servlet,具体示例如下: package cn.javass.chapter4. ...
- WebApi 接口参数详解
WebApi 接口参数不再困惑:传参详解 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为 ...
- 微信JS-SDK之图像接口开发详解
由于现在手头的项目中有一个上传证件照认证的功能(手机端),之前的思路是直接点击上传,然后直接将图片上传到服务器去,这篇文章有讲到(http://www.cnblogs.com/it-cen/p/453 ...
- python接口自动化(六)--发送get请求接口(详解)
简介 如果想用python做接口测试,我们首先有不得不了解和学习的模块.它就是第三方模块:Requests. 虽然Python内置的urllib模块,用于访问网络资源.但是,它用起来比较麻烦,而且,缺 ...
- Controller 接口控制器详解
Controller 控制器,是 MVC 中的部分 C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:1.收集.验证请求参数并绑定到命令对象:2.将命令对象交给业务对象,由业务对象处理并返回模 ...
- SCSI接口图文详解
目前存储设备的接口有五大类:IDE.SCSI.USB,并行口,串口,其中并行口与串口的速度非常慢,不提也罢,最主要的就是IDE,usb,SCSI.IDE(Integrated Drive Electr ...
- Android绘图监听接口OnPreDrawListener详解
public static interface ViewTreeObserver.OnPreDrawListener 我们先看下API中的定义: 类概述: 为即将绘制视图树时执行的回调函数定义的接口. ...
随机推荐
- css基本布局
一.一列布局 关键代码: { width:960; margin:0 auto: } 代码: 运行结果: 分析:以上代码实现一列布局,头部占整个浏览器 ...
- ng自定义服务(利用factory)
ng中我们可以自己定义自己的服务,服务中是一些使用重复率较高的方法.因此有效的使用服务可以提高开发速度. ng中定义服务的方法有多种,service,factory,provide,在此我只介绍最长用 ...
- .net做的exe和electron做的exe之间的通信问题
目前工作遇到个问题: .net做的exe和electron做的exe,之间进行数据通信 目前找到两个相对方便的方法: 1.命名管道 ①.net命名管道资料: 进程间通信 - 命名管道实现 ②elect ...
- 老李推荐: 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例
老李推荐: 第3章1节<MonkeyRunner源码剖析>脚本编写示例: MonkeyRunner API使用示例 MonkeyRunner这个类可以说是编写monkeyrunner脚 ...
- python 日期 & 时间
1. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 2. 时间间隔是以秒为单位的浮点小数. 3. 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长 ...
- JSON的数据类型
数据类型简介 在计算机中,我们需要知道正在处理什么类型的数据,因为不同类型的数据有着不同的操作途径.可以让两个阿拉伯数字相乘,但是不能让两个单词相乘. 在计算机科学中,有一种数据类型被称为原始数据类型 ...
- 用java写的一个程序,可以调用windows系统中自带的各种工具,例如截图,便签等
由于图片资源没有上传,所以运行后不会有图片,感兴趣的同学可以@我,我打包上传, package SmallPrograme; import java.awt.*; import java.awt.ev ...
- axure 动态面板制作图片轮播 (01图片轮播)
利用Axure的动态面板组件制作图片轮播: 首先现在操作区添加一个动态面板组件: 鼠标放在动态面板上,右键单击选择面板状态管理,给动态面板设置名称并添加两条状态然后点击确定. 双击动态面板,然后双击s ...
- 微信小程序,前端大梦想(二)
微信小程序的视图与渲染 今天我们从四个方面来了解小程序: •组件的基本使用 •数据绑定 •渲染标签 •模板的使用 一.组件的基本使用: 微信小程序为我们的开发提供了丰富的UI组件 ...
- ios ALAssetsLibrary简单的使用
关于ALAssetsLibrary的简单使用有两个方面: 第一:存储图片/视频方法如下: // With a UIImage, the API user can use -[UIImage CGIma ...