在接口  一张中,使用了隐式的接口实现方式,即在实现代码中没有制定实现那个接口中的CompareTo方法。相应地,自然就有显式的

接口实现方式,它指的是在实现过程中,明确指出实现哪一个接口中的哪一个方法。

  当多个接口中包含相同方法名称、相同返回类型和相同参数时,如果一个类同时实现了这些接口,隐式的接口实现就会出现命名冲突的

问题。如下演示:

  

    interface IChineseGreeting
{
void SayHello(); } interface IAmericanGreeting
{
void SayHello();
} public class Speaker:IChineseGreeting,IAmericanGreeting
{
public void SayHello()
{
Console.WriteLine("你好");
}
}
        static void Main(string[] args)
{ Speaker speaker = new Speaker(); //调用中国人打招呼方法
IChineseGreeting iChineseG = (IChineseGreeting)speaker;
iChineseG.SayHello(); //调用美国人的打招呼方法
IAmericanGreeting iAmericanG = (IAmericanGreeting)speaker;
iAmericanG.SayHello(); Console.Read();
}

  以上代码定义了一个Speaker类,它实现了两个接口,并且这两个接口声明的方法具有相同的

返回类型、相同的方法名称和相同的参数(演示都无参数)。若采用隐式的接口实现方式,将调用相同的SayHello()方法,而不管是获取了那个接口。

  

   从运行结果可以发现,不管获得了那个接口,程序都是调用的同一个方法实现,即都输出“你好”。但我们期望的并不是这样,我们希望调用IAmericanGreeting

接口的Sayhello()时能够输出的是“Hello”,而调用IChineseGreeting接口的SayHello方法时才输出“你好”。

     显示的接口实现方式可以解决这样的命名冲突问题,如下:

  

    public class Speaker:IChineseGreeting,IAmericanGreeting
{
void IChineseGreeting.SayHello()
{
Console.WriteLine("你好");
}
void IAmericanGreeting.SayHello()
{
Console.WriteLine("Hello");
} }

  运行结果如下: 

 

  在使用显式的接口实现方式时,需要注意以下几个问题。

    1.若使用显式实现接口,方法不能使用任何访问修饰符,显式实现的成员都默认为私有。如下:

    

    2.显式实现的成员默认是私有的,所以这些成员都不能通过类的对象进行访问。

    

  分析了隐式接口与显式接口的实现方式,如下几点是对其使用场景总结:

    1.采用隐式接口实现时,类和接口都可以访问接口中的方法;而若采用显式接口实现方式,接口方法只能通过接口来完成访问,因为此时接口方法默认为私有。

    2.当类实现单个接口时,通常使用隐式接口实现方法,这样类的对象可以直接去访问接口方法。

    3.当类实现了多个接口,并且接口中包含相同的方法名称、参数和返回类型时,则应使用显式接口实现方式。即使没有使用相同的方法前面,在实现多个接口时,仍推荐使用显式的方式,因为这样可以标识出哪个方法属于哪个接口。

  

【c# 学习笔记】显示接口实现方法的更多相关文章

  1. 【python学习笔记】9.魔法方法、属性和迭代器

    [python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...

  2. Java8学习笔记(八)--方法引入的补充

    在Java8学习笔记(三)--方法引入中,简要总结了方法引入时的使用规则,但不够完善.这里补充下几种情况: 从形参到实例方法的实参 示例 public class Example { static L ...

  3. C#设计模式学习笔记:(2)工厂方法模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7567880.html,记录一下学习过程以备后续查用. 一.引言 接上一篇C#设计模式学习笔记:简单工厂模式( ...

  4. Python学习笔记--Python字符串连接方法总结

    声明: 这些总结的学习笔记,一部分是自己在工作学习中总结,一部分是收集网络中的知识点总结而成的,但不到原文链接.如果有侵权,请知会,多谢. python中有很多字符串连接方式,总结一下: 1)最原始的 ...

  5. Mybatis学习笔记(三) —— DAO开发方法

    一.SqlSession的使用范围 SqlSession中封装了对数据库的操作,如:查询.插入.更新.删除等. SqlSession通过SqlSessionFactory创建. SqlSessionF ...

  6. 0040 Java学习笔记-多线程-线程run()方法中的异常

    run()与异常 不管是Threade还是Runnable的run()方法都没有定义抛出异常,也就是说一条线程内部发生的checked异常,必须也只能在内部用try-catch处理掉,不能往外抛,因为 ...

  7. 《Python基础教程(第二版)》学习笔记 -> 第九章 魔法方法、属性和迭代器

    准备工作 >>> class NewStyle(object): more_code_here >>> class OldStyle: more_code_here ...

  8. No2_1.接口继承多态_Java学习笔记_接口

    接口.继承与多态 1.继承和多态是面向对象开发语言中的重要一个环节,使用得当,可以将整个程序的架构变得非常有弹性,减少代码冗余: 2.继承:复用定义好的类: 3.多态:可以动态调整对象的调用,降低对象 ...

  9. Java学习笔记之接口和抽象类

    接口(interface)1.interface创建一个接口,implements实现接口 interface jiekou{} class lie implements jiekou{}2.接口可以 ...

随机推荐

  1. CodeForces 840C - On the Bench | Codeforces Round #429 (Div. 1)

    思路来自FXXL中的某个链接 /* CodeForces 840C - On the Bench [ DP ] | Codeforces Round #429 (Div. 1) 题意: 给出一个数组, ...

  2. Cogs 13. 运输问题4(费用流)

    运输问题4 ★★☆ 输入文件:maxflowd.in 输出文件:maxflowd.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 一个工厂每天生产若干商品,需运输到销售部门进 ...

  3. Kalman实际应用总结

    目录 Kalman理论介绍 一. 简单理论介绍理论 二. 升华理论介绍 Kalman基本应用 一. Kalman跟踪/滤波 二. Kalman预测/融合(单传感器) 三. Kalman多传感器融合A ...

  4. jQuery的ajax请求express服务器返回数据

    html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  5. Freestream边界条件【翻译】

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/93093-freestream-boundary-cond ...

  6. OpenFOAM中的基本变量快速认知【转载】

    转载自:http://blog.sina.com.cn/s/blog_a0b4201d0102vsf9.html label 实际上就是整型数据的变体,int,OF对它进行了包装,以适应32或64位系 ...

  7. Java核心复习——CompletableFuture

    介绍 JDK1.8引入CompletableFuture类. 使用方法 public class CompletableFutureTest { private static ExecutorServ ...

  8. SpringCloud介绍及入门一

    springcloud是什么 基于spring boot实现的服务治理工具包,管理和协微服务 把别人的东西拿来组合在一起,形成各种组件 微服务协调者[service registtry注册中心 Eur ...

  9. 关于Linux安装中NAT模式和桥接模式的区别详解

    1.一般我们在创建一个Linux虚拟机时候,会面临三个网络配置选择: 桥接模式.nat模式.host-only模式(主机模式,这个模式用得少,就不介绍了) 2.NAT模式: 所谓nat模式,就是虚拟系 ...

  10. JS 定时器的4种写法及介绍

    JS提供了一些原生方法来实现延时去执行某一段代码,下面来简单介绍一下setTiemout.setInterval.setImmediate.requestAnimationFrame. 一.什么是定时 ...