原文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. datagridview 代码添加列

    int column_key = 0; private DataGridViewTextBoxColumn column_add(string name) { DataGridViewTextBoxC ...

  2. 文本比较算法Ⅱ——Needleman/Wunsch算法的C++实现【求最长公共子串(不需要连续)】

    算法见:http://www.cnblogs.com/grenet/archive/2010/06/03/1750454.html 求最长公共子串(不需要连续) #include <stdio. ...

  3. Comparable接口——容器中自定义类排序

    1.容器TreeMap,默认根据Key对象中某个属性的从小到大排列元素. (1)如下代码示例,Key是整型数字,所以按照其从小到大的顺序排列 public class TestTreeMap { pu ...

  4. Django准备知识-web应用、http协议、web框架、Django简介

    一.web应用 Web应用程序是一种可以通过web访问的应用程序(web应用本质是基于socket实现的应用程序),程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 ...

  5. VSCode保存插件配置并使用 gist 管理代码片段

    setting sync 保存配置 由于公司和家里都使用 VSCode 作为主要编辑器,同步配置是最紧要的.VSCode 提供了setting sync插件,很方便我们同步插件配置.引用网上教程: 在 ...

  6. IdentityServer4 密码模式实现

    1.  修改 Config.cs using System.Collections; using System.Collections.Generic; using IdentityServer4.M ...

  7. iOS 设置textfield的最大文本长度

    //在现实开发中  需要控制文本输入长度 并实时做短信验证,代码如下 [self.textField addTarget:self action:@selector(codeChange:) forC ...

  8. php 常见图片处理函数封装

    <?php /** * 常见图像处理函数的封装 */ class Image{ private $info=[]; private $width;//原始图片宽度 private $height ...

  9. Angularjs集成第三方js插件之Uploadify

    有时候需要用一些第三方插件,比如datepicker,slider,或者tree等.以前的做法是直接通过jquery取得某个元素,然后调用某个方法即可.但在angularjs中,不能直接这么写,必须写 ...

  10. 目录打散-hash算法

    前几篇说了文件上传,都是上传到了WebRoot下的up目录,这样是不行的,文件多了性能就不行了.文件一般都是分目录存放的,这里讲建目录的一种算法.先看结果,经过本算法建的目录,结构是这样的,还以up目 ...