C#显示接口实现和隐式接口实现
在项目中可能会遇到显示接口实现和隐式接口实现。什么意思呢?简单来说使用接口名作为方法名的前缀,这称为“显式接口实现”;传统的实现方式,称为“隐式接口实现”。隐式接口实现如下:
interface ISkill
{
void Flying();
}
//隐式实现ISkill接口
public class Bird: ISkill
{
public void Flying()
{
}
}
我们在隐式实现接口下可以这样调用:
//第一种调用方式
Bird bird = new Bird();
bird.Flying(); //第二种调用方式
ISkill secondBrid = new Bird();
secondBrid.Flying();
直接用类和接口都可以调用Flying方法。
显示接口实现如下:
interface ISkill
{
void Flying();
} public class Bird : ISkill
{
//方法名称为接口名.方法名
void ISkill.Flying()
{
}
}
此时的调用只能用接口调用,如下:
ISkill secondBrid = new Bird();
secondBrid.Flying();
不能通过类来调用:
Bird bird = new Bird();
bird.Flying();
总结:
- 当类实现一个接口时,通常使用隐式接口实现,这样可以方便的访问接口方法和类自身具有的方法和属性。
- 当类实现多个接口时,并且接口中包含相同的方法签名,此时使用显式接口实现。即使没有相同的方法签名,仍推荐使用显式接口,因为可以标识出哪个方法属于哪个接口。
- 隐式接口实现,类和接口都可访问接口中方法。显式接口实现,只能通过接口访问。
C#显示接口实现和隐式接口实现的更多相关文章
- 转】C#接口-显式接口和隐式接口的实现
[转]C#接口-显式接口和隐式接口的实现 C#中对于接口的实现方式有隐式接口和显式接口两种: 类和接口都能调用到,事实上这就是“隐式接口实现”. 那么“显示接口实现”是神马模样呢? interface ...
- 读书笔记_Effective_C++_条款四十一:了解隐式接口和编译期多态
从本条款开始,就进入了全书的第七部分:模板与泛型编程.模板与泛型在C++中是非常重要的部分,还记得本书第一章时,把C++视为一个联邦,它由四个州政府组成,其中一个政府就是模板与泛型了. 本条款是一个介 ...
- C#的显式接口和隐式接口(转载)
接口的实现分为:隐式实现和显式实现.如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现.显示实现是通过使用接口的完全限定名来实现接口成员 ...
- 读书笔记 effective c++ Item 41 理解隐式接口和编译期多态
1. 显示接口和运行时多态 面向对象编程的世界围绕着显式接口和运行时多态.举个例子,考虑下面的类(无意义的类), class Widget { public: Widget(); virtual ~W ...
- 008.在C#中,显式接口VS隐式接口
原文http://www.codeproject.com/Articles/1000374/Explicit-Interface-VS-Implicit-Interface-in-Csharp (At ...
- Effective C++ Item 41 了解隐式接口和编译期多态
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:class 和 templates 都支持接口和多态. 对 classes 而言接口是 ...
- selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python
我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...
- [EffectiveC++]item41:了解隐式接口和编译器多态
classes和templates都支持接口和多态,interfaces and polymorphism 对classes而言接口是显示的explicit,以函数签名为中心.多态则是通过virtua ...
- Effective C++ -----条款41:了解隐式接口和编译期多态
classes和templates都支持接口(interface)和多态(polymorphism). 对classes而言接口是显式的(explicit),以函数签名为中心.多态则是通过virtua ...
随机推荐
- 01-开始使用django(全、简)
目录 (一)创建项目 1.生成django默认目录 2.创建应用目录 3.安装应用 4.配置使用mysql数据库 5.运行轻量级web服务器,预览 (二)设计模型 1.在models.py中定义模型类 ...
- 如何通过 ClickBank 等类似虚拟平台进行在线销售并获得收益
CLICKBANK在国内被广大赚友简称为CB,和淘金小站之前介绍过的PayDotCom一样,都是国外非常著名的CPS广告联盟.CLICKBANK成立于1998年,是全球四个最大的虚拟商品零售平台之一( ...
- 嵌入式文件系统构建工具 busybox / buildroot / openwrt
1.busybox busybox最轻量 1) 修改Makefile CROSS_COMPILE ?= /usr/local/gcc-linaro-arm-linux-gnueabihf/bin/ar ...
- matplotlib显示栅格图片
参考自Matplotlib Python 画图教程 (莫烦Python)(13)_演讲•公开课_科技_bilibili_哔哩哔哩 https://www.bilibili.com/video/av16 ...
- 接管radiobutton onclick 事件
You can nil the OnClick event handler while changing a radiobutton state programmatically: procedure ...
- centos7使用中文输入法
centos7自带中文输入法,可能我们在安装时会跳过选择汉语拼音,我们来重新设置一下吧 假如你在命令行界面,输入Ctrl+Alt+F1进入图形界面 点击左上角系统工具 --> 设置 --&g ...
- hdu6194 string string string
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6194 题目: string string string Time Limit: 2000/10 ...
- Lua的table库函数insert、remove、concat、sort详细介绍(转载)
函数列表: table.insert(table,[ pos,] value) table.remove(table[, pos]) table.concat(table[, sep[, i[, j] ...
- docker issue-Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
Here is my docker version when i run docker version : Client: Version: 1.8.1 API version: 1.20 Go ve ...
- Python学习示例源码
函数和函数式编程 函数定义: 函数调用: 过程定义: 过程调用: 面向过程的编程方法: """ 面向对象-----类------class 面向过程-----过程---- ...