在接口  一张中,使用了隐式的接口实现方式,即在实现代码中没有制定实现那个接口中的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. 获取历史K线数据的几个方法

    1.通过已有的股票交易软件下载数据,如果他们是开源结构的,就可以解析他们的K线数据. 2.在互联网上抓取数据 int iStockCode;CString strUrl; 通过OpenUrl.Read ...

  2. TCP 拥塞控制

    TCP 拥塞控制 相关名词 滑动窗口 tcp通过滑动窗口进行流量控制,所谓的窗口可以理解为接收端所能提供的缓冲区大小. TCP是一个滑动窗口协议,即一个TCP连接的发送端在某个时刻能发多少数据是由滑动 ...

  3. javascript权威指南第15章 使用Canvas绘图

    HTML <!DOCTYPE html> <html> <head> <title>canvas</title> </head> ...

  4. js-清空array数组

    两种实现方式: 1.splice:删除元素并添加新元素,直接对数组进行修改,返回含有被删除元素的数组. arrayObject.splice(index,howmany,element1,....., ...

  5. java调出cmd窗口长ping某个ip

    package lct.conference.test; import java.io.IOException; public class Test { public static void main ...

  6. learning scala dependency injection

    println("Step 1: Create a trait which knows how to do create, read, update and delete operation ...

  7. Peaks 线段树合并

    Peaks 线段树合并 \(n\)个带权值\(h_i\)山峰,有\(m\)条山峰间双向道路,\(q\)组询问,问从\(v_i\)开始只经过\(h_i\le x\)的路径所能到达的山峰中第\(k\)高的 ...

  8. NodeJS后台

    NodeJS后台 后台: 1.PHP 2.Java 3.Python 优势 1.性能 2.跟前台JS配合方便 3.NodeJS便于前端学习 https://nodejs.org/en/ 1.切换盘符 ...

  9. python合并多个txt文件

    python合并多个txt文件 #合并一个文件夹下的多个txt文件 #coding=utf-8 import os #获取目标文件夹的路径 filedir = os.getcwd()+'\\数据' # ...

  10. Allure自动化测试报告之修改allure测试报告名称

    1.从github获取allure代码 https://github.com/allure-framework/allure2 2.安装gradle,用于打包jar brew install grad ...