我注意到IOrderedEnumerable接口有一个具体的实现,那就是OrderedEnumerable.cs类.然而,我也注意到它是内部的,你不能在代码中使用它.

这样做有什么好处,因为我想知道公开它会有什么缺点,为什么运行库需要这个类.

推荐答案

运行时需要这个类,因为OrderBy()OrderByDescending()方法必须返回一些与您期望IOrderedEnumerable的行为相同的内容.

将其设置为internal的好处与所有Information Hiding个/封装的好处相同:.NET团队可以自由更改该类,而不必担心他们会 destruct 其他人的代码.

例如,OrderedEnumerable构造函数takes more arguments nowit used to.因为这个类是internal,所以他们只需要更改自己的代码就可以适应这种变化.

如果它是public,您或我可能会忍不住编写代码来创建new OrderedEnumerable<TKey, TValue>(...).然后,当我们升级到下一个框架版本时,它会 destruct 我们的代码,因为构造函数签名不再存在.

编写库的团队会非常小心地只公开"接口"(不仅仅是C#interface,还有方法签名、类型等).他们愿意无限期地保持向后兼容性.默认情况下,他们将所有内容都设置为内部或私有,只有经过仔细考虑后才将其设置为public.

另一个好处是,它保持了面向公众的表面清洁,并致力于他们希望人们对他们的图书馆做的事情.如果它们库中的每个类和方法都被公开,我们的智能感知菜单将充满我们可能永远不会真正想要使用的选项.

Csharp相关问答推荐

在包含空项的列表上使用具有断言T的摘要表

ß != ss与ICU进行不区分大小写的比较

如何使用Automapper映射两个嵌套列表

更新数据库中的对象失败,原因是:Microsoft. EntityFrame Core. GbUpdateConcurrencyResponse'

为什么xslWriter不总是按照xslWriterSet中指定的格式格式化该文档?

错误NU 1301:无法加载源的服务索引

一种安全的方式来存储SSH凭证(MAUI/C#应用程序)

如何在C#中删除一个特殊字符,如"使用Regex"

如何注册实现同一接口的多个服务并注入到控制器构造函数中

查找表中的模式

用C#调用由缓冲区指针参数组成的C API

为什么我的表单在绑定到对象时提交空值?

Amazon SP-API确认发货不设置&Quot;递送服务

如何解决提交按钮后 Select 选项错误空参照异常

C#Null判断处理失败

DbContext-传递自定义配置选项

自定义列表按字符串的部分排序

是否可以在Entity Framework Core中使用只读 struct 作为拥有实体?

序列化过程中的死循环

C#USB条形码 scanner 在第二次扫描时未写入行尾字符