c#接口使用详解

c#中接口隐式与显示实现

c#中接口可以隐式实现、显示实现,隐式实现更常使用、显示实现较少使用

其区别在于

  1. 显示实现避免接口函数签名冲突
  2. 显示实现只可以以接口形式调用
  3. 显示实现其子类需无法继承接口
  4. 隐式实现可以撕裂调用、可以接口调用
  5. 隐式实现其子类可以继承接口的实现
  6. 隐式实现可以使用虚函数、子类可以重载

定义接口:

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();调用

接口在继承中的使用

接口显示实现是无法在继承中保留的,若希望子类继承接口的实现需使用隐式实现。

  1. 使用隐式实现
  2. 若子类可以overwrite请使用virtual关键字修饰实现函数
  3. 可以定义abstract类继承接口,强制子类实现接口

父类实现接口:

class ShowMsgImplicit : IShowMsg
{
public virtual void Show()
{
Console.WriteLine("ShowMsgImplicit");
}
}

子类继承父类之后可以重载或者默认使用父类方法实现接口。

抽象类实现接口:

abstract class ShowMsgAbstract : IShowMsg
{
public abstract void Show();
}

子类继承抽象类必须实现抽象方法实现接口。

c#接口使用详解的更多相关文章

  1. Java语言Socket接口用法详解

    Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...

  2. Java之函数式接口@FunctionalInterface详解(附源码)

    Java之函数式接口@FunctionalInterface详解 函数式接口的定义 在java8中,满足下面任意一个条件的接口都是函数式接口: 1.被@FunctionalInterface注释的接口 ...

  3. SpringMVC(4.2):Controller接口控制器详解(2)

    原文出处: 张开涛 4.5.ServletForwardingController 将接收到的请求转发到一个命名的servlet,具体示例如下: package cn.javass.chapter4. ...

  4. WebApi 接口参数详解

    WebApi 接口参数不再困惑:传参详解   阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为 ...

  5. 微信JS-SDK之图像接口开发详解

    由于现在手头的项目中有一个上传证件照认证的功能(手机端),之前的思路是直接点击上传,然后直接将图片上传到服务器去,这篇文章有讲到(http://www.cnblogs.com/it-cen/p/453 ...

  6. python接口自动化(六)--发送get请求接口(详解)

    简介 如果想用python做接口测试,我们首先有不得不了解和学习的模块.它就是第三方模块:Requests. 虽然Python内置的urllib模块,用于访问网络资源.但是,它用起来比较麻烦,而且,缺 ...

  7. Controller 接口控制器详解

    Controller 控制器,是 MVC 中的部分 C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:1.收集.验证请求参数并绑定到命令对象:2.将命令对象交给业务对象,由业务对象处理并返回模 ...

  8. SCSI接口图文详解

    目前存储设备的接口有五大类:IDE.SCSI.USB,并行口,串口,其中并行口与串口的速度非常慢,不提也罢,最主要的就是IDE,usb,SCSI.IDE(Integrated Drive Electr ...

  9. Android绘图监听接口OnPreDrawListener详解

    public static interface ViewTreeObserver.OnPreDrawListener 我们先看下API中的定义: 类概述: 为即将绘制视图树时执行的回调函数定义的接口. ...

随机推荐

  1. Struts(五)之OGNL、contextMap

    一.OGNL 1.1.定义 OGNL是Object-Graph Navigation Language的缩写,它是一个单独的开源项目. Struts2框架使用OGNL作为默认的表达式语言.它是一种功能 ...

  2. wamp2.4.4 如何配置虚拟主机及反向代理(解决跨域问题)

    一.找到安装目录下的httpd.conf文件 1. 删除Include conf/extra/httpd-vhosts.conf前面的#号(开启虚拟主机的配置) 2. 删除LoadModule pro ...

  3. ABP框架实战 1.基础信息维护

    在之前的一个开发项目中,因为公司战略发展,引用了这个ABP开源框架作为新项目的基础版本,由于客户的要求需要迁移旧系统数据,以及其他的一些原因,数据库采用了Oracle数据库管理.所以引用了Dapper ...

  4. 老李知识普及:web安全性的两大权威组织

    老李知识普及:web安全性的两大权威组织 两个重要的WEB应用安全组织-WASC/OWASPWeb Application Security Consortium (WASC)a.WEB应用安全标准的 ...

  5. 1137: 零起点学算法44——多组测试数据输出II

    1137: 零起点学算法44--多组测试数据输出II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: ...

  6. 1094:零起点学算法01——第一个程序Hello World!

    Description 题目很简单 输出"Hello World!"(不含引号),并换行. Input 没有输入 Output 输出"Hello World!" ...

  7. 利用sub lr,lr,#4:程序是如何进行返回的?

    1: ARM采用的是3级流水线 ARM的流水线结构为:   取指 -----> 译码 ------> 执行 ARM代码:                  PC           PC- ...

  8. Android -- 从源码带你从EventBus2.0飚到EventBus3.0(一)

    1,最近看了不少的面试题,不管是百度.网易.阿里的面试题,都会问到EventBus源码和RxJava源码,而自己只是在项目中使用过,却没有去用心的了解它底层是怎么实现的,所以今天就和大家一起来学习学习 ...

  9. Unity粒子系统

    最近比较清闲,就重新看了一遍例子系统,感觉能把效果做的炫酷对于初学者来说并不是一件容易的事,但是回头想想,最重要的原因可能还是没有把Particle Systems组件研究透吧,温故而知新,一起复习一 ...

  10. Linux 系统管理04--账号管理

    Linux系统管理04--账号管理 一.用户账号管理 1.用户账号概述 (1)用户账号的常见分类: 1>超级用户:root uid=0 gid=0 权限最大. 2>普通用户:uid> ...