一个关于接口实现的问题

huangchao2011 2016-12-28 04:03:39
框架自带的类 ConcurrentQueue<T>是一个并发集合,而且它继承了IProducerConsumerCollection<T>接口,该接口有一个TryAdd(T)方法,这个方法表示“试图添加”,返回值是bool类型
msdn的链接是:https://msdn.microsoft.com/zh-cn/library/dd287098(v=vs.110).aspx
然后问题来了:为什么ConcurrentQueue<T> 这个类没有实现TryAdd()方法呢,想不通啊
...全文
114 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
巴士上的邂逅 2016-12-28
  • 打赏
  • 举报
回复
我给你截图的意思就是一个是直接实现了,一个显式实现了,显示实现就会在别处调用时看不到。 这么快就结帖了!
huangchao2011 2016-12-28
  • 打赏
  • 举报
回复
引用 6 楼 xinweilee 的回复:
[quote=引用 3 楼 huangchao2011 的回复:] [quote=引用 1 楼 xinweilee 的回复:] ConcurrentQueue<string> collection = new ConcurrentQueue<string>(); IProducerConsumerCollection<string> producer = collection as IProducerConsumerCollection<string>; producer.TryAdd(); ConcurrentQueue<T>显式实现了接口IProducerConsumerCollection<string>,访问时必须将实例转换成IProducerConsumerCollection<string>接口才能访问接口成员。
啊,说实话,我还真不知道原来还可以这样用的。但是继承了接口不是必须实现接口吗?但是这个类没有实现接口[/quote] 实现了啊,只不过是显示实现。 实现接口有两种方式:显示实现和隐式实现,一般隐式实现用的比较多,也就是你理解的那种; 找找显示实现和隐式实现的资料看看。[/quote]我先去看看资料,稍后再来
cheng2005 2016-12-28
  • 打赏
  • 举报
回复
谁告诉你没实现?不是明明都写着实现了吗?
huangchao2011 2016-12-28
  • 打赏
  • 举报
回复
引用 1 楼 xinweilee 的回复:
ConcurrentQueue<string> collection = new ConcurrentQueue<string>(); IProducerConsumerCollection<string> producer = collection as IProducerConsumerCollection<string>; producer.TryAdd(); ConcurrentQueue<T>显式实现了接口IProducerConsumerCollection<string>,访问时必须将实例转换成IProducerConsumerCollection<string>接口才能访问接口成员。
我们平时自己写一个接口,如果有类继承它,是必须要实现该接口提供的方法,如果没有方法实现直接就报错了,这里虽然你这样写确实可以调用TryAdd方法,但是为什么子类没有实现接口的方法,没有报错呢?这里麻烦你好好讲解讲解
xinweilee 2016-12-28
  • 打赏
  • 举报
回复
引用 3 楼 huangchao2011 的回复:
[quote=引用 1 楼 xinweilee 的回复:] ConcurrentQueue<string> collection = new ConcurrentQueue<string>(); IProducerConsumerCollection<string> producer = collection as IProducerConsumerCollection<string>; producer.TryAdd(); ConcurrentQueue<T>显式实现了接口IProducerConsumerCollection<string>,访问时必须将实例转换成IProducerConsumerCollection<string>接口才能访问接口成员。
啊,说实话,我还真不知道原来还可以这样用的。但是继承了接口不是必须实现接口吗?但是这个类没有实现接口[/quote] 实现了啊,只不过是显示实现。 实现接口有两种方式:显示实现和隐式实现,一般隐式实现用的比较多,也就是你理解的那种; 找找显示实现和隐式实现的资料看看。
huangchao2011 2016-12-28
  • 打赏
  • 举报
回复
引用 2 楼 yuankaiwsl 的回复:
我们平时自己写一个接口,如果有类继承它,是必须要实现该接口提供的方法,如果没有方法实现直接就报错了,这里虽然你这样写确实可以调用TryAdd方法,但是为什么子类没有实现接口的方法,没有报错呢?这里麻烦你好好讲解讲解
huangchao2011 2016-12-28
  • 打赏
  • 举报
回复
引用 2 楼 yuankaiwsl 的回复:
可能是我问题的标题写的有歧义,其实我就是想知道为什么ConcurrentQueue<T> 这个类没有实现IProducerConsumerCollection 这接口里面的TryAdd方法
huangchao2011 2016-12-28
  • 打赏
  • 举报
回复
引用 1 楼 xinweilee 的回复:
ConcurrentQueue<string> collection = new ConcurrentQueue<string>(); IProducerConsumerCollection<string> producer = collection as IProducerConsumerCollection<string>; producer.TryAdd(); ConcurrentQueue<T>显式实现了接口IProducerConsumerCollection<string>,访问时必须将实例转换成IProducerConsumerCollection<string>接口才能访问接口成员。
啊,说实话,我还真不知道原来还可以这样用的。但是继承了接口不是必须实现接口吗?但是这个类没有实现接口
巴士上的邂逅 2016-12-28
  • 打赏
  • 举报
回复
xinweilee 2016-12-28
  • 打赏
  • 举报
回复
ConcurrentQueue<string> collection = new ConcurrentQueue<string>(); IProducerConsumerCollection<string> producer = collection as IProducerConsumerCollection<string>; producer.TryAdd(); ConcurrentQueue<T>显式实现了接口IProducerConsumerCollection<string>,访问时必须将实例转换成IProducerConsumerCollection<string>接口才能访问接口成员。
一、在基于Laravel8.x实现API接口签名认证系统课程里: 我将带领大家基于laravel 8.x来开发用户认证系统与接口签名验证系统以解决API接口请求中的安全问题,我将带领同学们认识Laravel用户认证的两大核心要素,守卫者与数据提供者,并从源码层面分析用户认证中涉及到的核心概念,通过基于接口签名的认证逻辑,带领同学们实现自定义守卫者以及签名认证器,实现基于签名认证的用户登陆逻辑,并基于该守卫者实现一个接口签名认证中间件对接口请求进行拦截处理。 在实战过程中,涉及到的核心概念我们会在源码层面对其原理进行阐述,以帮助同学们更好地掌握这些知识。 在完成上述功能后,我们会带领大家将我们实现的基于接口签名认证的用户认证与接口认证逻辑封装成Laravel扩展包,从而使得我们的代码与Laravel核心框架解耦,以保证功能上的独立性和可复用性。 二、在基于Laravel 7.x的后台权限验证API课程里: 以后台权限验证API的开发为载体,带领大家使用Laravel 7.x进行权限扩展包的开发,你将学习到如下知识: 1、如何使用laravel编写Restful api接口 2、如何使用composer进行项目依赖管理,laravel常用扩展的安装与使用,如dingo/api 以及repository 3、如何使用jwt进行实现后台用户认证机制 4、学习使用laravel扩展包的形式进行后台权限验证API的开发 5、如何编写Seeders帮助我们在新系统里实现数据的初始化 6、理解和使用Laravel核心概念和面向接口的编程思想 三、这两套课程分别解决的是API接口请求的安全问题接口权限问题

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧