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

前端之家收集整理的这篇文章主要介绍了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

猜你在找的C#相关文章