原文http://www.codeproject.com/Articles/1000374/Explicit-Interface-VS-Implicit-Interface-in-Csharp

(Aty表示本人)
 
介绍
什么是显式和隐式接口
什么时候需要显式接口
更简洁的方法(ISP:接口隔离原则)
显式接口更多
结论
 
介绍
        文章将讨论下显式接口,讨论它们与隐式接口的区别,以及为什么应该避免使用。
什么是显式和隐式接口

        C#中有两种方式来实现接口:显式和隐式
        定义如下接口:
  
       当我们隐式的实现该接口时,代码如下:
 
       绝大多数开发者实现接口都使用隐式实现。当我们要显式实现接口时,Send方法和Recevie方法将被定义成私有的,代码如下:

       简单地来讲,隐式实现的方法是公开的(public),而显式实现的方法是私有的(private)。那问题来了,为什么会有public和private之分,又是什么情况下使用这两种实现方式。
 

什么时候需要显式接口

        让我先事先声明:
                当你的具体类不需要包含这个接口抽象时,可以使用显式实现。

我可以感觉到有多难理解以上声明。

        我会慢慢地讲解,首先我们要理解"抽象"的含义。抽象:从客户端的角度,只需要显示必要的方法和属性。
        以WeatherService类为例

       如果有两个层对它进行调用,UI层和数据层。两个层关注的测重点不一样。在UI层中只是关心City和Temperature这两个属性,而数据层只关心Send和Receive这两个方法的调用
 
        对于编程的最佳实践,我再声明一句:
            一个好的软件架构拥有许多抽象类。
        
        如果使用隐式实现,Send和Receive方法为公开的,则如果在UI层中调用,Send和Receive方法是可见的,但并没有使用到。一个好的方法则将实现改为显式实现,则方法为私有的,UI层中看不到这两个方法。那如何能使用这两个方法呢?在数据层中,如下调用:
更简洁的方法(ISP:接口隔离原则)

        接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。使用多个专门的接口比使用单一的总接口要好。(百度百科)。
        一个比较好的实现是再新建一个接口,IWeather接口,如下:
        都通过隐式实现,这样在调用的过程中,UI将变量类型定义为IWeather,数据层定义为IRequest。
        (注:其实Aty对这个还是不明白的,定义一个抽象类更好,接口定义行为,可能作者只是想说明接口隔离这个概念)
        

显式接口更多
     当一个类实现多个接口时,而接口中又包含同名的方法,则需要使用显式实现。

 

显式接口结论

    1.显式实现应该要避免,推荐使用ISP接口隔离原则
    2.在一种情况下可以使用,当你出于某些原因,不能为具体类赋予接口的行为时则使用显式实现

008.在C#中,显式接口VS隐式接口的更多相关文章

  1. 转】C#接口-显式接口和隐式接口的实现

    [转]C#接口-显式接口和隐式接口的实现 C#中对于接口的实现方式有隐式接口和显式接口两种: 类和接口都能调用到,事实上这就是“隐式接口实现”. 那么“显示接口实现”是神马模样呢? interface ...

  2. (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务)

    (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务) 1.概念:隐式事务,显式事务,自动提交事务 2.操作:如何设置事务模式 3.存储过程中的事务 XACT_ABORT 1 ...

  3. selenium-webdriver中的显式等待与隐式等待

    在selenium-webdriver中等待的方式简单可以概括为三种: 1 导入time包,调用time.sleep()的方法传入时间,这种方式也叫强制等待,固定死等一个时间 2 隐式等待,直接调用i ...

  4. C# 接口的隐式与显示实现

    隐式实现的话实现的方法属于实现的类的,可以直接通过类的对象访问,显式实现的话方法是属于接口的,可以看成是寄托在类中实现的,访问这些方法时要先把对象转换成接口对象,然后通过接口对象调用 一般来讲显式实现 ...

  5. C# 接口的隐式与显示实现【转】

    以前在用到接口时,从来没注意到接口分为隐式实现与显示实现.昨天在浏览博客时看到相关内容,现在根据自己的理解记录一下,方便日后碰到的时候温习温习.通俗的来讲,“显示接口实现”就是使用接口名称作为方法名的 ...

  6. C# Interface显式实现和隐式实现

    c#中对接口的实现方式有两种:隐式实现和显式实现,之前一直没仔细看过,今天查了些资料,在这里整理一下. 隐式实现的例子 interface IChinese { string Speak(); } p ...

  7. C# 接口的隐式与显示实现及适应场景

    通俗的来讲,“显示接口实现”就是使用接口名称作为方法名的前缀;而传统的实现方式称之为:“隐式接口实现”.废话不说,例子如下: interface IAnimal { void Dog(); } cla ...

  8. C# 接口的隐式与显示实现说明

    以前在用到接口时,从来没注意到接口分为隐式实现与显示实现.昨天在浏览博客时看到相关内容,现在根据自己的理解记录一下,方便日后碰到的时候温习温习. 通俗的来讲,"显示接口实现"就是使 ...

  9. Scala 中的隐式转换和隐式参数

    隐式定义是指编译器为了修正类型错误而允许插入到程序中的定义. 举例: 正常情况下"120"/12显然会报错,因为 String 类并没有实现 / 这个方法,我们无法去决定 Stri ...

  10. Android-----Intent中通过startActivity(Intent intent )隐式启动新的Activity

    显式Intent我已经简单使用过了,也介绍过概念,现在来说一说隐式Intent: 隐式Intent:就是只在Intent中设置要进行的动作,可以用setAction()和setData()来填入要执行 ...

随机推荐

  1. c# 字符串中某个词出现的次数及索引

    字符串中某个词出现的次数主要是考察队字符串方法的使用: indexof(): 有9个重载,具体的请转到F12查看详细内容: 本文使用的是第6个重载: 如果找到该字符串,则为从零开始的索引位置:如果未找 ...

  2. session和cookie的异同

    Cookie是服务器发给客户端的一小段文本,保存在浏览器所在客户端的内存和磁盘上.服务器可以从客户端读出这些cookie.通过cookie,客户端可以和服务器端建立起一种联系,也就是说,Cookie是 ...

  3. 程序媛计划——python初级课时1~2

    在命令行中运行py文件:python 文件路径/文件名 python变量必须赋值后才能使用,因为py变量只有赋值后才会被创建. py可以同时给多个变量赋值:a,b,c = 10,20,'dfjkdj' ...

  4. Notification通知栏的使用

    一.基础的知识了解 1.pendingIntent : 它是Intent的封装,可以跳转某个Activity.给Service发送一个命令.还可以发送一个广播 2.进度条的使用方法 3.更新通知栏的信 ...

  5. python 模块导入全局变量

    在哪种情况下需要从模块导入全局变量 项目里多个脚本均更改「某一个全局变量」时 全量变量需要实现可配置时 从模块导入全局变量的方法 from test_prokject import global_va ...

  6. Vue 部署单页应用,刷新页面 404/502 报错

    在 Vue 项目中,可以选择 hash或者 history.pushState() 实现路由跳转.如果在路由中使用history模式: export default new Router({ mode ...

  7. centos安装 Anaconda3及使用

    下载安装 下载地址https://www.anaconda.com/download/ 旧版本下载https://repo.continuum.io/archive/ 比如下载Anaconda3-4. ...

  8. 部署虚拟环境安装Linux系统

      目录                                                              准备工作 安装linux系统 重置root管理员密码 源代码编译 R ...

  9. Sublime Text 乱码解决(Package Control 和 ConvertToUTF8插件安装)

    Sublime Text的界面正如她的名字sublime一样,充满极客感觉的高大上,而且拥有强大的功能.但是她默认是不支持GBK编码的. 本来安装一个Package Control插件管理,再安装其他 ...

  10. Python中第三方库的安装

    网上的帖子挺多的,教你如何安装,安装第三方工具库的方法总共分为三类:Dos系统下pip命令:安装包下载安装:IDE集成环境下安装(Pycharm,Spyder……) http://www.jiansh ...