gpt4 book ai didi

c# - 为什么核心类型只实现了部分接口(interface)?

转载 作者:太空狗 更新时间:2023-10-29 20:21:58 25 4
gpt4 key购买 nike

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

Q2 我应该在我的代码中做同样的事情吗?

我问了这个问题here ,所以我想,好吧,那是很久以前的事了,你可以有不同的用法等等,现在支持这种实现只是出于一致性的原因。但新类(class)也能做到这一点。

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

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

更新

我不担心为什么我得到异常,很明显。但是我不明白为什么实现定义明确的契约,而不是所有成员(这会导致令人不快的运行时异常)?

最佳答案

您可能会争辩说原始设计中的界面不够细化。例如,大多数人从不使用 SyncRoot - 它可能在不同的界面上。同样,不幸的是,例如,没有接口(interface)提供只读索引器访问。

就目前而言,界面就是它们的样子。实现main还是很方便的IList[<T>]/ICollection[<T>]/IEnumerable[<T>]虽然接口(interface) - 它为大多数调用者提供了访问他们需要的东西的权限......所以第一个示例中的索引器Add在第二个。

公平地说,他们也提供 IsFixedSizeIsReadOnly - 查询第一个会导致您不调用 Add .回复 SyncRoot - 这在 ConcurrentQueue<T> 内部可能没有意义,任何实现都会破坏类型的逻辑。通常我会说“那么它不是那种类型;不要实现接口(interface)”,但要重复我之前的声明……大多数人从不使用 SyncRoot - 所以我同意 ;p

关于c# - 为什么核心类型只实现了部分接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6071093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com