今天在看“并发集合”的时候,接口IProducerConsumerCollection<T> 有一个方法是TryAdd(),表示“试图”去添加,然后ConcurrentQueue<T> 这个类继承了该接口,

根据我以前对接口的理解就是,ConcurrentQueue<T>这个类必须要实现TryAdd()方法才行。然后事实上,通过ConcurrentQueue<T>类的实力对象,根本点不出TryAdd方法

但是msdn上面对于ConcurrentQueue<T>类的说明,却明确说明了“显示实现”TryAdd接口方法。如果说实现了那为什么ConcurrentQueue<T>实例对象为什么点不出来TryAdd方法呢? 我搞不懂!后来问了一下人,他说“你去看看显示实现跟隐式实相关的资料”

诶,以前真没去关心,原来接口还分显示跟隐式。

一、接口的显示实现与隐式实现

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 显示接口隐式接口
{
class Program
{
static void Main(string[] args)
{
myImplicitClass iClass = new myImplicitClass();
iClass.myMethon(); myExplicitClass eClass = new myExplicitClass();
//类型转换成接口
(eClass as myInterface).myMethon();
}
} interface myInterface
{
void myMethon();
} public class myImplicitClass : myInterface
{
/// <summary>
/// 传统模式就是这种隐式模式来实现接口方法的
/// </summary>
public void myMethon()
{
Console.WriteLine("传统的隐式实现接口方法");
}
} public class myExplicitClass : myInterface
{
/// <summary>
/// 必须显示实现接口 接口名称.方法名 的方式来调用方法
/// </summary>
void myInterface.myMethon()
{
Console.WriteLine("显示实现接口方法");
}
}
}

执行结果是:

那问题又来了,既然有隐式实现(默认实现方式)那还要显示干嘛?

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 显示调用接口Demo
{
class Program
{
static void Main(string[] args)
{
MyClass c = new MyClass();
int i = c.Add();
Console.WriteLine(i);
}
} interface addInterface
{
int Add(int i);
} class BaseClass
{
public int Add(int i)
{
return i + ;
}
} class MyClass :BaseClass, addInterface
{ }
}

二、接口的显示实现的意义

像这样的一个程序接口addInterface1有一个Add方法,如果子类MyClass的没有去实现Add方法的话,其实也是可以正常运行的,因为基类实现了Add方法。
那如果说,现在子类也实现了Add方法的话会怎样?

添加了new 关键字就会覆盖基类的Add方法,那有没有一种方法既可以在子类中实现一个Add方法,又不会覆盖基类的Add方法呢?

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 显示调用接口Demo
{
class Program
{
static void Main(string[] args)
{
MyClass c = new MyClass(); int i = c.Add();
Console.WriteLine("调用基类的Add方法结果是:"+i); i = ((addInterface)c).Add();
Console.WriteLine("显示调用接口的Add方法结果是:" + i);
}
} interface addInterface
{
int Add(int i);
} class BaseClass
{
public int Add(int i)
{
return i + ;
}
} class MyClass :BaseClass, addInterface
{
int addInterface.Add(int i)
{
return i + i;
}
}
}

执行结果是:

c#接口容易被忽视的问题的更多相关文章

  1. SAP升级ECC6.0 引起的一个事故

    上个月底,公司的SAP系统升级到了ECC6,在升级时,我们进行了所有关联系统的集成测试,当时没有发现什么问题. 过了2周,需要从SAP下载对账单了,这个时候问题出现了,很多分公司的数据下载失败.和SA ...

  2. .NET框架设计(常被忽视的C#设计技巧)

    阅读目录: 1.开篇介绍 2.尽量使用Lambda匿名函数调用代替反射调用(走进声明式设计) 3.被忽视的特性(Attribute)设计方式 4.扩展方法让你的对象如虎添翼(要学会使用扩展方法的设计思 ...

  3. usb驱动开发24之接口驱动

    从第一节我们已经知道,usb_generic_driver在自己的生命线里,以一己之力将设备的各个接口送给了linux的设备模型,让usb总线的match函数,也就是usb_device_match, ...

  4. Jenkins+Jmeter+Ant接口持续集成

    修改时间 修改内容 修改人 2016.5.22 创建 刘永志 2016.6.15 完成 刘永志 前言: 为什么要用Jmeter做接口测试: 当选择这套方案的时候,很多人会问,为什么选择Jmeter做C ...

  5. .NET框架设计(常被忽视的框架设计技巧)

    阅读目录: 1.开篇介绍 2.元数据缓存池模式(在运行时构造元数据缓存池) 2.1.元数据设计模式(抽象出对数据的描述数据) 2.2.借助Dynamic来改变IOC.AOP动态绑定的问题 2.3.元数 ...

  6. Jenkins+Jmeter+Ant 接口持续集成(转)

    来源:https://testerhome.com/topics/5186 为什么要用Jmeter做接口测试 当选择这套方案的时候,很多人会问,为什么选择Jmeter做Case管理?为什么不自己写框架 ...

  7. Blackfin DSP(六):BF533的SPORT接口

    1.特性 bf533有两个SPORT口(synchronous serial Port),即同步串行接口.完全独立的接收和发送通道,且每个通道都具有缓冲,最高速度可达SCLK/2.最大支持32bit字 ...

  8. RESTFUL接口

    原文地址:http://kb.cnblogs.com/page/512047/ 1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者 ...

  9. 重构9-Extract Interface(提取接口)

    我们来介绍一个常常被忽视的重构:提取接口.如果你发现多于一个类使用另外一个类的某些方法,引入接口解除这种依赖往往十分有用.该重构实现起来非常简单,并且能够享受到松耦合带来的好处. public cla ...

随机推荐

  1. MyBatis的动态SQL详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下 MyBatis 的一个强大的特性之一通常是它 ...

  2. Github使用指南-从新手到专家

    转载自:http://www.cnblogs.com/xirongliu/p/4589834.html 个人从刚刚开始接触github,啥都不知道,不会用,不知道能够用来干什么,到现在坚持在githu ...

  3. xampp出现 Access forbidden! 问题解决

    解决 XAMPP 出现 A今天安装了XAMPP 试了下,增加虚拟主机时出现没权限,apache配置文件httpd.conf的allow属性,把下图中的文字注释掉: 然后公开于外网出现以下错误,也很容易 ...

  4. Oracle 支持在具有 DHCP 分配的 IP 地址的系统上进行安装

    今天在安装Oracle 10g的时候,遇到了“ Oracle 支持在具有 DHCP 分配的 IP 地址的系统上进行安装” 这个问题,经过搜索,找到了解决方案,具体如下: win7下右键单机" ...

  5. debian8 Apache 更改根目录

    进入配置文件,路径为:/etc/apache2/sites-available/000-default.conf 然后找到DocumentRoot /var/www/html ,将其更改为 Docum ...

  6. dubbo工作原理

    part -- 外挂1.dubbo借助spring的schema启动和初始化 1.1 spring扫描所有jar下META-INF的spring.handlers和spring.schemas. 1. ...

  7. 德国GFZ

    关于GFZ的介绍,图片中有,这里不赘述. 在下面的图片中介绍的,除了能够提供免费的数据支持外,就属左边的应用框架. 1.目前开源框架里,空间数据库多是postgis,根据数据量和组织方式,可以选择mo ...

  8. 通过JS简单实现图片缩放

    ;display: none;cursor: pointer;} #FullScreenDiv{;display: none;background-color: #919191;filter: alp ...

  9. The novaclient Python API

    The novaclient Python API Usage First create a client instance with your credentials: >>> f ...

  10. variably modified 'dist' at file scope|

    转自:http://blog.csdn.net/wusuopubupt/article/details/18408227 错误原因: The reason for this warning is th ...