微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 为什么核心类型只部分实现接口?

Q1为什么.NET中的新类仅部分实现接口?

Q2我在代码中也这样做吗?

我问了这个问题here,所以我想,好吧,很久以前,你可以有不同的用法等等,现在这种实现只是出于一致性原因而受支持.但新课程也是如此.

int[] list = new int[] {};
IList iList = (IList)list;
ilist.Add(1); //exception here

ICollection c = new ConcurrentQueue<int>();
var root = c.SyncRoot; //exception here

UPDATE

我不担心为什么我会得到例外,很明显.但我不明白为什么类实现明确定义的合同,而不是所有成员(这可能导致令人不快的运行时异常)?

解决方法

您可能会认为接口在原始设计中不够精细.例如,大多数人从不使用SyncRoot – 它可能已经在不同的界面上.同样,不幸的是,例如,没有接口提供只读索引器访问.

就目前而言,界面就是它们的本质.实现主IList [< T>] / ICollection [< T>] / IEnumerable [< T>]接口仍然非常方便 – 它为大多数呼叫者提供了他们所需要的访问权限……所以第一个例子中的索引器,第二个例子中的Add.

公平地说,他们也提供IsFixedSize和IsReadOnly – 查询一个会导致你不要调用Add. Re SyncRoot – 在ConcurrentQueue< T>中可能没有意义,任何实现都会破坏该类型的逻辑.通常我会说“然后它不是那种类型;不要实现接口”,但重复我之前的陈述……大多数人从不使用SyncRoot – 所以我很好用它; p

原文地址:https://www.jb51.cc/csharp/100418.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐