zoukankan      html  css  js  c++  java
  • 008.在C#中,显式接口VS隐式接口

    原文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.在一种情况下可以使用,当你出于某些原因,不能为具体类赋予接口的行为时则使用显式实现
  • 相关阅读:
    【Springboot】Springboot整合Ehcache
    时间戳转化正常的时间格式
    申请抖音企业认证流程
    js与原生进行交互
    vim 高亮
    shell 关于路径查询显示pwd
    shell 关于字符切割 cut
    linux ubuntu 关于vim得一些基本命令
    shell 在终端中打开另一个终端执行命令
    shell 获取时间
  • 原文地址:https://www.cnblogs.com/a2htray/p/4573597.html
Copyright © 2011-2022 走看看