显式与隐式(ExplicitAndImplicit)
显式与隐式(Explicit And Implicit)
1.概念
1.1 显式
1.2 隐式
2.例子
2.1 代码
using System;
namespace ExplicitAndImplicit{
//刀子
public interface IKnife{
void KillPeople();
}
//枪
public interface IGun{
void KillPeople();
}
//隐式实现
public class WrongKillMachine:IKnife,IGun{
public void KillPeople(){
Console.WriteLine("切切切脑袋");
}
}
//显式实现:
//1.实现接口方法不需要加访问定义符
//2.实现接口方法前面要加接口名.方法名,用来指定其实现的接口
//2.实现接口方法只能被显式的调用,不能被隐式的调用:
// 显式调用:
public class KillMachine:IKnife,IGun{
void IKnife.KillPeople(){
Console.WriteLine("切切切");
}
void IGun.KillPeople(){
Console.WriteLine("啪啪啪");
}
}
public static class Case
{
public static void Begin(){
Console.WriteLine("Design Pattern —— Explicit And Implicit:");
//隐式实现
WrongKillMachine w = new WrongKillMachine();
w.KillPeople(); //显式实现
IKnife k = new KillMachine();
k.KillPeople();
IGun g = new KillMachine();
g.KillPeople();
}
}
}
2.2 结果

2.3 例子解释
2.3.1 隐式
2.3.2 显式
2.4 结合上面的例子写一个小故事
3.其他认证
3.1 关于一个类多个接口的实现既有显式也有隐式的规则(混合)
using System;
namespace ExplicitAndImplicit
{
public interface InfA{
void Do();
}
public interface InfB{
void Do();
}
public interface InfC{
void Do();
}
public interface InfD{
void Do();
}
public class Class1:InfA,InfB,InfC,InfD{
void InfA.Do(){
Console.WriteLine("A");
}
void InfB.Do(){
Console.WriteLine("B");
}
public void Do(){
Console.WriteLine("C");
}
}
//测试目的是看多个接口实现是否可以部分显式、部分隐式,答案是肯定的
//同样,显式接口必须通过接口的声明实现 比如 Interface i = new Class();
public static class Case2_TestMultiIntegration{
public static void Begin(){
Utility.UnitStart(,"1.2.1 Implicit-通过隐式方式调用隐式实现的借口 Class c = new Class(); c.DoMethod();");
Class1 c = new Class1();
c.Do();
Utility.UnitStart(,"1.2.2 Explicit-通过显式方式调用显式方式实现的借口 Interface i = new Class(); i.DoMethod();");
InfA a = new Class1();
a.Do();
Utility.UnitStart(,"1.2.3 MixedImplicit-通过显式方式调用隐式实现的接口 Interface i = new Class(); i.DoMethod();");
InfD d = new Class1();
d.Do();
}
}
}
3.2 结果:

4.应用原则
显式与隐式(ExplicitAndImplicit)的更多相关文章
- dll的加载方式主要分为两大类,显式和隐式链接
之前简单写过如何创建lib和dll文件及简单的使用(http://blog.csdn.net/betabin/article/details/7239200).现在先再深入点写写dll的加载方式. d ...
- 【RS】CoupledCF: Learning Explicit and Implicit User-item Couplings in Recommendation for Deep Collaborative Filtering-CoupledCF:在推荐系统深度协作过滤中学习显式和隐式的用户物品耦合
[论文标题]CoupledCF: Learning Explicit and Implicit User-item Couplings in Recommendation for Deep Colla ...
- C++ 不具有继承关系的类之间的显式,隐式转换 2013-07-11 15:41
好久没有写blog了,今天在学习c#的时候看到某一章节 讲类的隐式与显式转换.特此留笔,以供后续参考之用. 关于显式,隐式转换有些争论,说什么不建议隐式转换.但是个人认为非必要,如果有良好的基础书写基 ...
- Scala中的Implicit(隐式转换,隐式参数,隐式类)
文章来自:http://www.cnblogs.com/hark0623/p/4196452.html 转发请注明 代码如下: /** * 隐式转换 隐式参数 隐式类 */ //隐式转换 class ...
- 实例理解scala 隐式转换(隐式值,隐式方法,隐式类)
作用 简单说,隐式转换就是:当Scala编译器进行类型匹配时,如果找不到合适的候选,那么隐式转化提供了另外一种途径来告诉编译器如何将当前的类型转换成预期类型.话不多说,直接测试 ImplicitHel ...
- (转载)Android理解:显式和隐式Intent
Intent分两种:显式(Explicit intent)和隐式(Implicit intent). 一.显式(设置Component) 显式,即直接指定需要打开的activity对应的类. 以下多种 ...
- JavaScript 数据类型转换(显式与隐式)
一.数据类型 JS中有5中简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String.还有一种复杂数据类型------Object,Object本质是 ...
- 【转】Android理解:显式和隐式Intent---- try catch
原文网址:http://blog.csdn.net/xiao__gui/article/details/11392987 Intent是Android初学者比较难理解的一个东西.我这里以通俗易懂的语言 ...
- 简单的interface显式和隐式的实现
一,新建接口 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// < ...
随机推荐
- g4e基础篇#4 了解Git存储库(Repo)
章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...
- Bootstrap table 分页 In asp.net MVC
中文翻译文档: http://blog.csdn.net/rickiyeat/article/details/56483577 版本说明: Jquery v2.1.1 Bootstrap V3.3.7 ...
- [20190324]奇怪的GV$FILESPACE_USAGE视图.txt
[20190324]奇怪的GV$FILESPACE_USAGE视图.txt--//发现GV$FILESPACE_USAGE定义很奇怪,做一个记录.1.环境:SCOTT@book> @ ver1P ...
- 初识Spring Boot
1.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,用于简化基于Spring的搭建与开发过程,通过少量的代码创建Spring应用. 2.Spring Boo ...
- Mysql的NULL和Empty String
本文基于Mysql5.7版本的参考资料: https://dev.mysql.com/doc/refman/5.7/en/working-with-null.html https://dev.mysq ...
- C# Modbus协议中读取浮点数的操作方法
输入参数P1,P2代表PLC中浮点数储存的两个寄存器获取的数据 public static float GetFloat(ushort P1, ushort P2) { int intSign, in ...
- Elasticsearch拼音分词和IK分词的安装及使用
一.Es插件配置及下载 1.IK分词器的下载安装 关于IK分词器的介绍不再多少,一言以蔽之,IK分词是目前使用非常广泛分词效果比较好的中文分词器.做ES开发的,中文分词十有八九使用的都是IK分词器. ...
- 如何使用微信web开发者工具调试企业微信
最近因工作需要围绕着企业微信来进行调试,从而掏出了我的微信web开发者工具,在进行授权的时候微信web开发者工具成功的提示了我:“您未绑定企业微信开发者权限”.那么关键来了,因为我也百度过,发现也有很 ...
- Python里面search()和match()的区别
转自https://www.cnblogs.com/aaronthon/p/9435967.html match()函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None searc ...
- vue过渡动画
概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate.c ...