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

interface IAnimal
{
void Dog();
}
class Animal : IAnimal
{
public void Dog()
{
Console.WriteLine("dog...");
}
}

定义了一个IAnimal接口,一般我们都会这么调用:

//通过类调用
    Animal animal = new Animal();
    animal.Dog();     //或者通过接口调用
    IAnimal animal = new Animal();
    animal.Dog();

类和接口都能调用到,事实上这就是“隐式接口实现”。

那么“显示接口实现”是神马模样呢?

interface IAnimal
  {
    void Dog();
  }
  class Animal:IAnimal
  {
    void IAnimal.Dog()
    {
      Console.WriteLine("dog...");
    }
  }     //只能通过接口调用     IAnimal animal = new Animal();     animal.Dog();     用类的方法去实现时会报错,不允许,“显示接口实现”只允许接口实现。如果真想用类来实现呢,那必须要进行一下强制类型转换。     //强制类型转换后即可     Animal animal = new Animal();
    (animal as IAnimal).Dog();

既然显示接口实现这么不给力,为什么还要存在了,凡事存在即合理。在实际项目中,有时某个类往往会继承多个接口,而接口中往往会有一些相同名称、参数与类型的值。通过显式接口实现可以为避免一些不必要的歧义(我在项目中碰到的不多,可能是因为项目太小的原因吧)。

  显示接口实现与隐式接口实现的适应场景

  1. 当类实现一个接口时,通常使用隐式接口实现,这样可以方便的访问接口方法和类自身具有的方法和属性。
  2. 当类实现多个接口时,并且接口中包含相同的方法签名,此时使用显式接口实现。即使没有相同的方法签名,仍推荐使用显式接口,因为可以标识出哪个方法属于哪个接口。
  3. 隐式接口实现,类和接口都可访问接口中方法。显式接口实现,只能通过接口访问。

转自 Ben Zhang

C# 接口的隐式与显示实现【转】的更多相关文章

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

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

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

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

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

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

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

    小弟不才,各位大牛嘴下留情... 一.对于继承类里头有相同方法时候,用接口方式去调用,会优先查走显式接口方法 例如 public interface IA { void Test(); } publi ...

  5. 小议C#接口的隐式与显示实现(续)

    上文连接,讲的比较模糊,而且调用起来感觉比较混乱 http://www.cnblogs.com/walleyekneel/p/3581489.html 这次改为显式接口调用,可能项目也有这个一个需求 ...

  6. C# 使用隐式或显示实现接口的区别

    通俗的来讲,"显示接口实现"就是使用接口名称作为方法名的前缀;而传统的实现方式称之为:"隐式接口实现".费话不说,例子如下:      interface IA ...

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

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

  8. C# interface 的隐式与显示实现及适应范围源码演示

    把代码过程中经常用到的一些代码段做个记录,如下的资料是关于C# interface 的隐式与显示实现及适应范围演示的代码. interface IAnimal { void Dog(); } clas ...

  9. 从头认识java-13.9 隐式和显示的创建类型实例

    对于上一章节擦除引起的问题与解决的方法有读者提出过于简单.这里解释一下:由于笔者本身也遇不到对应的问题.仅仅是凭空想像一些有可能的问题,基于水平有限,因此上一章节写的比較简单,欢迎广大读者踊跃提意见, ...

随机推荐

  1. win10+vs2013+Qt5.4 安装方法

    环境:win10 cn_visual_studio_ultimate_2013_x86_dvd_3009109 qt-opensource-windows-x86-msvc2013_64_opengl ...

  2. 【原创】_INTSIZEOF 内存按照int对齐

    #include <stdarg.h> 里面定义了如下宏 #define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(siz ...

  3. Esper系列(十三)Splitting and Duplicating Streams

    功能:将同一个事件流分发到其它的事件流中. 格式: 1  ; i < events.length; i++) {   78              EventBean event = even ...

  4. Node.js中的ORM

    ORM2是一款基于Node.js实现的ORM框架,名字相当的霸气,算是同类框架中非常出色的一款,具体介绍请猛击:https://github.com/dresende/node-orm2 刚接触Nod ...

  5. leetcode@ [79/140] Trie树应用 Word Search / Word Search II

    https://leetcode.com/problems/word-search/ class Solution { public: struct Trie{ Trie *next[]; bool ...

  6. 【noip2007】树网的核

    题解: 首先我们要知道一个性质:如果有多条直径 这个核不论在哪条直径上 答案都是一样的 这样我们就可以随便找一条直径 在这条直径上枚举核的位置 并且dfs预处理maxlon[i] (i在直径上) 表示 ...

  7. 10 steps to get Ruby on Rails running on Windows with IIS FastCGI- 摘自网络

    Since the original tech preview release of FastCGI last year, we've been seeing a lot of requests fo ...

  8. ubuntu下PHP支持cURL

    公司项目需要,注册需要验证手机号码,其中需要LAMP支持cURL.由于事先安装平台的时候,并没有注意到这一点,所以编译PHP5的时候,并没有使用参数--with-curl.后来需要的时候,查一些参考方 ...

  9. Lodop Web打印插件使用

    <object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" st ...

  10. HDFS的Java客户端操作代码(HDFS的查看、创建)

    1.HDFS的put上传文件操作的java代码: package Hdfs; import java.io.FileInputStream; import java.io.FileNotFoundEx ...